We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
javaScript基本类型就是typeof 能够识别的7种“语言层面的”数据类型
undefined用于表达一个值 / 数据不存在,也就是“非值(non-value)”,例如 return 没有返回值,或变量声明了但没有绑定数据。"值 + 非值“ 的概念上就构成了一个完整的类型系统
在对象类型系统中, null用于表达一个对象不存在,也就是“非对象”,例如在原型继承中上溯原型链直到根类——根类没有父类,因此它的原型就指向null null并不在基本类型系统中,它只是在“对象类型系统”中的、一个特殊对象的字面量表示
typeof null // object
ECMAScript 约定:null是值,是非对象类型的, 而typoof 运算 null 为 object 从ECMAScript ed5开始,“基本类型”与“内部类型”就分别被称为语言类型与规范类型了。
在这两种类型系统中,JavaScript语言认为null是个是引用类型(Object)的值,而ECMAScript认为null是个原始类型(Primitive types)的值。
所有 5 种能放入私有槽(亦即是说它们有相应的包装类)的值(Values),都是原始值;并且,再加上两个特殊值 undefined 和 null,那么就是所谓原始值(Primitive values)的完整集合了。
Object(123) // [object Number] Object('123') // [object String] Object(true) // [object Boolean] Object(Symbol() //[object Symbol]" ... obj = Object(x); // 等效于(如果能操作内部槽的话) obj.[[PrimitiveValue]] = x;
从typeof(x)的 7 种结果类型来看,其中 string、boolean、number、bigint 和 symbol 的值类型与对象类型转换,就是将该值存入私有槽,或者从私有槽中把相应的值取出来就好了。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JavaScript 类型系统之概述
1. javaScript typeof 基本类型系统
2 typeof 所能识别数据类型分成两大类
3 undefined 与 null 表达非值与非对象的概念
4. 存在差异的两套类型规范
4.1 为什么未存在差异???
5. JavaScript语言类型系统
6 ECMAScript规范类型系统
6.1 语言类型
Primitive values(原始值)
一般的值(Values)与原始值(Primitive values)之间的关系
原始值定义
所有 5 种能放入私有槽(亦即是说它们有相应的包装类)的值(Values),都是原始值;并且,再加上两个特殊值 undefined 和 null,那么就是所谓原始值(Primitive values)的完整集合了。
对象
6.2 规范类型
引用类型 (Reference Specification Type )(ECMAScript 2015 Section 6.2.3)
7. 值与对象之间的转换
从值 x 到引用,调用 Object(x) 函数
从引用 x 到值,调用 x.valueOf() 方法;或调用 4 种值类型的包装类函数,例如 Number(x),或者 String(x) 等等。
总结
回顾总结
语言中的引用类型和值类型,以及 ECMAScript 中的原始值类型(Primitive values)之间存在区别;
语言中的所谓“引用类型”,与 ECMAScript 中的“引用(规范类型)”是完全不同的概念;
所有值通过包装类转换成对象时,这个对象会具有一个内部槽,早期它统一称为[[PrimitiveValue]],而后来 JavaScript 为每种包装类创建了一个专属的;
使用 typeof(x) 来检查 x 的数据类型,在 JavaScript 代码中是常用而有效方法;
原则上来说,系统只处理 boolean/string/number 三种值类型(bigint 可以理解为 number 的特殊实现),其中 boolean 与其他值类型的转换是按对照表来处理的。
参考资料
The text was updated successfully, but these errors were encountered: