🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 变量 声明变量(数字、字符、下划线及$); 初始化变量,赋初值; 单个var声明多个变量,用逗号分隔; 区分大小写; # 操作符 # 基本数据类型 * 数字——number * 字符串——string * 布尔值——boolean * undefined——访问不存在的变量,未被定义 * null——没有值、空值,已被定义 ## 查看类型——typeof ### number 当一个数字以0开头时,就表示一个八进制数; 当以0x开头时,就表示一个十六进制数。 指数形式 > 1e2、1e+2、1E2、1E+2——(在1后面加2个0) Infinity 无限数 NaN 非数 ### string string转number ``` var s = '1'; s = 3 * s; typeof s; // "number" var s = '1'; s++; typeof s; // "number" var s = '100'; typeof s; // "string" s = s * 1; // 100 typeof s; // "number" ``` ### boolean 如果在一个非布尔值上执行逻辑运算,该值会在计算期间被转换位布尔值: ``` var b = "one"; !b; // false var b = ""; !b; // true var b = "one"; !!b; // ⭐Boolean:双反即本身;非布尔值先转成取反布尔值,再取反变自身 // true var b = ''; !!b; // 空值即false // false var a = undefined; !!a; // false var a = null; !!a; // false ``` > 双重取反转换为等效布尔值 >**falsy**⭐:空字符串""/ null/ undefined/ 数字0/ 数字NaN/ 布尔值false > **truthy**:其他值 > 代码可读性:尽量使用括号而非优先级来设定代码的执行顺序 #### 惰性求值 ⭐ 利用 **逻辑与/或** 可以执行若干逻辑操作,在第三库中较常见 ``` // 当window对象中未定义$时,才将$指向Zepto window.$ === undefined && (window.$ = Zepto) true || false || true || false || true // true var a = 5; true || (a = 6); a; // 5 a=6未执行 true && (a = 6); a; // 6 ``` ``` true || "something"; // true true && "something"; // "something" // 如果变量mynum已经被定义了,就保留其原有值,否则赋值10 var mynum = mynum || 10; mynum; // 10 ``` ### 比较运算符 ⭐ | 操作符 | 名称 | 说明 | | --- | --- | --- | | == | 相等运算符 | 在比较前,两边的操作数会被自动转换为相同类型 | | === | 等价运算符 | 不进行类型转换,值和类型都要相同才为true | ``` // NaN不等于任何东西,包括它自己 NaN === NaN // false ``` ### undefined & null 变量不存在或未经赋值,访问都会返回undefined; 不同的是,只能通过代码赋为null; ``` var i = 1 + undefined; i; // NaN var i = 1 + null; i; // 1 ``` ``` !!undefined; // false !!null; // false ``` ``` "" + null; // "null" "" + undefined; // "undefined" ``` # 数组 用于存储数据的列表; 索引位置从0开始; 用一对方括号来指定元素的索引值,`arr[index]`; 数组可存储数组; ## 增加、更新 `arr[index] = 数值;` index不存在,增加值;index存在,更新值 ## 删除 `delete arr[index];` # 循环 ## 代码块 被包括在0对或多对大括号中的那一段代码 > 代码可读性:使用分号;/ 统一缩进格式/ 尽量使用大括号。 ### if条件表达式 简单时,可使用三元运算符替代 很多else if时,使用`switch(a){ case x: break; default:;}`替代 ### 检查变量是否存在 ``` var result = ''; if(somevar){result = 'yes';} // Uncaught ReferenceError: somevar is not defined if(!!somevar){result = 'yes'} // Uncaught ReferenceError: somevar is not defined result; // "" ``` 检查变量是否存在,更好的选择是使用typeof ⭐ ``` var result = ''; if(typeof somevar !== 'undefined'){result = 'yes'}; result; // "" ``` ## 循环 while do-while for(初始化; 循环条件; 自增操作) > 循环条件值部分可以放在初始化中,减少计算操作; for-in 遍历对象 for-of 遍历数组等iterable对象 forEach