-
null == undefined => true 因为 == 只会比较值, 而 null 和undefined 比较时都会先转成对应的 数值 0 来比较!!! 0==0 =》 true
-
boolean 值 true 与 false 只能是小写 含大写的 都是有效的标识符【变量名 函数名 等】 而不是boolean值 !! 使用两个取非运算可以把任何数值转成布尔值!!!
-
NAN == NaN =》 false || 只要是NaN 参与的运算 返回的都是NaN
-
判断 NaN isNaN(NaN) => true || 只要是 无法转成 数值类型的 值 传入到 isNaN 都会返回 true ‘10’ true false ‘10aaa’ 等都会返回 false
-
Number()函数基于如下规则执行转换。
布尔值,true 转换为 1,false 转换为 0。
数值,直接返回。
null,返回 0。
undefined,返回 NaN。
字符串,应用以下规则。
如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。
因此,Number("1")返回 1,Number("123")返回 123,Number("011")返回 11(忽略前面
的零)。
如果字符串包含有效的浮点值格式如"1.1",则会转换为相应的浮点值(同样,忽略前面的零)。
如果字符串包含有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整
数值。
如果是空字符串(不包含字符),则返回 0。
如果字符串包含除上述情况之外的其他字符,则返回 NaN。
对象,调用 valueOf()方法,并按照上述规则转换返回的值。如果转换结果是 NaN,则调用
toString()方法,再按照转换字符串的规则转换。
-
考虑到用 Number()函数转换字符串时相对复杂且有点反常规,通常在需要得到整数时可以优先使
用 parseInt()函数。parseInt()函数更专注于字符串是否包含数值模式。字符串最前面的空格会被
忽略,从第一个非空格字符开始转换。如果第一个字符不是数值字符、加号或减号,parseInt()立即
返回 NaN。这意味着空字符串也会返回 NaN(这一点跟 Number()不一样,它返回 0)。
-
不同的数值格式很容易混淆,因此 parseInt()也接收第二个参数,用于指定底数(进制数)。如
果知道要解析的值是十六进制,那么可以传入 16 作为第二个参数,以便正确解析:
let num = parseInt("0xAF", 16); // 175
事实上,如果提供了十六进制参数,那么字符串前面的"0x"可以省掉:
let num1 = parseInt("AF", 16); // 175
let num2 = parseInt("AF"); // NaN
-
通过第二个参数,可以极大扩展转换后获得的结果类型。比如:
let num1 = parseInt("10", 2); // 2,按二进制解析
let num2 = parseInt("10", 8); // 8,按八进制解析
let num3 = parseInt("10", 10); // 10,按十进制解析
let num4 = parseInt("10", 16); // 16,按十六进制解析
因为不传底数参数相当于让 parseInt()自己决定如何解析,所以为避免解析出错,建议始终传给
它第二个参数。
注意 多数情况下解析的应该都是十进制数,此时第二个参数就要传入 10。
-
tostring() 把一个值转换为字符串
toString()返回数值的十
进制字符串表示。而通过传入参数,可以得到数值的二进制、八进制、十六进制,或者其他任何有效基
数的字符串表示,比如:
let num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"
console.log(num.toString(8)); // "12"
console.log(num.toString(10)); // "10"
console.log(num.toString(16)); // "a"
这个例子展示了传入底数参数时,toString()输出的字符串值也会随之改变。数值 10 可以输出为
任意数值格式。注意,默认情况下(不传参数)的输出与传入参数 10 得到的结果相同。
如果你不确定一个值是不是 null 或 undefined,可以使用 String()转型函数,它始终会返回表
示相应类型值的字符串。String()函数遵循如下规则。
如果值有 toString()方法,则调用该方法(不传参数)并返回结果。
如果值是 null,返回"null"。
如果值是 undefined,返回"undefined"。
-
模板字符串`` 和原始字符串String.raw 标签函数
// Unicode 示例
// \u00A9 是版权符号
console.log(
\u00A9); // ©console.log(String.raw
\u00A9); // \u00A9// 换行符示例
console.log(
first line\nsecond line);// first line
// second line
console.log(String.raw
first line\nsecond line); // "first line\nsecond line"
Symbol 数据类型:
/* js 新特性 symbol 类型 === 看做 永远不会重复字符串
使用场景1,用于区分某些数据接口中属性重名而某些被覆盖的情况【加上一个key:Symbol()属性!!!
2.如果某些属性不想暴露给外部,可以使用Symbol定义index【key】 【let symbol = Symbol('description') [symbol]:"object" 这种方式】
】
*/
let sl = Symbol('这是一段描述');//Symbol('description')
console.log(sl.description);//获取描述
let sl1 = Symbol.for('另一种定义方式'); //全局定义 symbol
let sl2 = Symbol.for('另一种定义方式')
console.log(sl1 == sl2);//true 描述一样 第二个定义会引用第一次定义的 两个变量相等!!!
console.log(Symbol.keyFor(sl1));//另一种获取描述方式
let mySymbol = new Symbol(); // TypeError: Symbol is not a constructor
如果你确实想使用符号包装对象,可以借用 Object()函数:
let mySymbol = Symbol();
let myWrappedSymbol = Object(mySymbol);
console.log(typeof myWrappedSymbol); // "object"