【CSDN AI数字营销终极解密】:20年老炮亲测的5大核心能力与3个致命误区
2026/6/7 0:47:03
1,变量和常量的区别:
维度 | 变量 | 常量 |
可修改性 | 声明后可以被重新赋值 | 声明时必须赋值,且不可修改 |
作用域 | let 为块级作用域,var为函数/全局作用域 | 块级作用域 |
适用场景 | 值需要动态变化的场景 | 固定值 |
2.写一个函数判断一个js变量的数据类型:
<script> function getDateType(value){ return Object.prototype.toString.call(value).slice(8,-1).tolowerCase(); } </script>类型 | null | undefined |
含义 | 表示空值(主动赋值的空) | 表示未定义(变量声明未赋值) |
类型检测 | typeof null →“object” | typeof undefined→undefined |
场景 | 主动清空变量(如 let obj = null) | 变量未初始化,函数无返回值 |
条件表达式?表达式1:表达式2const arr = [10, 20, 30]; // 基础遍历 for (let i = 0; i < arr.length; i++) { console.log(`索引${i}:${arr[i]}`); // 索引0:10 | 索引1:20 | 索引2:30 } // 中断遍历(break) for (let i = 0; i < arr.length; i++) { if (arr[i] === 20) break; // 遇到20停止遍历 console.log(arr[i]); // 仅输出10 } // 异步场景(await 生效) async function test() { const arr = [1, 2, 3]; for (let i = 0; i < arr.length; i++) { await new Promise(resolve => setTimeout(resolve, 1000)); console.log(arr[i]); // 每隔1秒输出1、2、3(阻塞遍历) } } test();核心:数组原型方法,回调式遍历,简洁但灵活性差(无法中断)。
语法:arr.forEach((value,index,array)=>{逻辑}
示例:
const arr = [10, 20, 30]; // 基础遍历 arr.forEach((val, idx) => { console.log(`索引${idx}:${val}`); // 同for循环输出 }); // 无法中断(break 报错) try { arr.forEach(val => { if (val === 20) break; // Uncaught SyntaxError: Illegal break statement }); } catch (e) { console.error(e); } // 回调内return仅跳出当前回调(不会终止遍历) arr.forEach(val => { if (val === 20) return; // 跳过20,继续遍历30 console.log(val); // 输出10、30 }); // 异步陷阱(await 不阻塞) async function test() { const arr = [1, 2, 3]; arr.forEach(async val => { await new Promise(resolve => setTimeout(resolve, 1000)); console.log(val); // 1秒后同时输出1、2、3(无阻塞) }); } test();核心:ES6 迭代器语法,兼顾简洁性和灵活性,支持大部分可迭代对象。
语法: for(const value of 可迭代对象){逻辑}
const arr = [10, 20, 30]; // 基础遍历(直接取值) for (const val of arr) { console.log(val); // 10、20、30 } // 中断遍历(break/continue 生效) for (const val of arr) { if (val === 20) break; console.log(val); // 仅输出10 } // 遍历其他可迭代对象(字符串/Map) const str = "abc"; for (const char of str) console.log(char); // a、b、c const map = new Map([["a", 1], ["b", 2]]); for (const [key, value] of map) { console.log(`${key}: ${value}`); // a:1、b:2 } // 异步支持(await 生效) async function test() { const arr = [1, 2, 3]; for (const val of arr) { await new Promise(resolve => setTimeout(resolve, 1000)); console.log(val); // 每隔1秒输出1、2、3(阻塞遍历) } } test(); // 获取索引(结合 Array.prototype.entries()) for (const [idx, val] of arr.entries()) { console.log(`索引${idx}:${val}`); // 索引0:10 | 索引1:20 | 索引2:30 }