Skip to content

补充

类型增强 ———— 对象包装器

有包装器的基础类型: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"); // NaN

Number(string) 会去除开头与结尾 \s(空格,\n,制表符,\t),但是中间有就不行了。

被动转换

四则运算会自动转换

js
2 - "1"; // 1
"2" - 1; // 1
"2" / "1"; // 2

Boolean

falsy: 0''nullundefinedNaN

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"; //true

null 与 undefined

null 和 undefined 使用 == 时,需要格外小心!
因为的他们的 == 规则很特殊

null == undefined; // true

null 和 undefined 的 == 拥有特殊规则,不会进行类型转换。

其他情况下,null 被转化为 0,undefined 被转化为 NaN。

js
null > 0; // false

null == 0; // false ; == 为特殊规则,不回发生类型转换!

null >= 0; // true