补充
类型增强 ———— 对象包装器
有包装器的基础类型:String、Number、Boolean、Symbol、BigInt
无包装器的:null、undefined
包装器提供额外功能,并且用完即毁。
并不建议直接 new 对象包装器。并且不带 new 是对数据进行转换。
js
typeof 0; // "number"
typeof new Number(0); // "object"!typeof
类型检查
类型转换
https://www.yuque.com/qinsjs/jsinfo/gsgcz40s5fx7gox0
转换分为 主动转换 和 被动转换。
主动转换,注意没有 new
String
js
String(value);Number
js
Number(str);一些特殊例子
js
Number(undefined); // NaN
Number(null); // 0
Number(true); // 1
Number(false); // 0
Number(" 192 "); // 192
Number(" 19 2"); // NaNNumber(string) 会去除开头与结尾 \s(空格,\n,制表符,\t),但是中间有就不行了。
被动转换
四则运算会自动转换
js
2 - "1"; // 1
"2" - 1; // 1
"2" / "1"; // 2Boolean
falsy: 0、''、null、undefined、NaN
0 包含 0、-0、0n。
其他的为 truthy
Object
在对象部分
比较
string 比较
字符串比较使用“字典(dictionary)”或“词典(lexicographical)”顺序进行判定。
准确的说, 是 Unicode 编码顺序。
js
alert("Z" > "A"); // true
alert("Bee" > "Be"); // true
alert("Glow" > "Glee"); // true不同类型间的比较
JavaScript 会首先将其转化为数字(number)再判定大小。
js
0 == "0"; //truenull 与 undefined
null 和 undefined 使用 == 时,需要格外小心!
因为的他们的 == 规则很特殊
null == undefined; // truenull 和 undefined 的 == 拥有特殊规则,不会进行类型转换。
其他情况下,null 被转化为 0,undefined 被转化为 NaN。
js
null > 0; // false
null == 0; // false ; == 为特殊规则,不回发生类型转换!
null >= 0; // true