RT,转型函数String()
是全局对象的方法吗?
还有高程3上的关于单体内置对象的这一段:
ECMA-262 对内置对象的定义是:“由ECMAScript 实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript 程序执行之前就已经存在了。”意思就是说,开发人员不必显式地实例化内置对象,因为它们已经实例化了。前面我们已经介绍了大多数内置对象,例如Object、Array 和String。ECMA-262 还定义了两个单体内置对象:Global 和Math。
我想问下 要是不必显式的实例化对象,那 new Object()
,new Array()
这些是做什么用的?
读到了第五章,有些疑问,希望好心人可以解答下?
这些东东都是 构造函数 ,其实 在js里面 很多相应的数据类型对象 都是由 构造函数生成的,比如 number string arry object 只是 有时候写法不同 ,毕竟怎么方便怎么来,如果随便一个东东都要 new 一个函数,写起来也太麻烦了。
看描述好像在说Object,Array,String这种对象是有es标准实现,何具体的运行环境无关,他说的这几个对象应该是函数对象,而不是实力对象吧
String
在 JS 中是被定义成一个类的,而类在 JS 中是被定义为构造函数的,所以,实际上 String
是一个类,也就是一个函数。至于 new String()
和 String()
有啥区别,可能要从 ECMA-262 上去找了,因为平时很少会这样使用,所以我并不知道它们的结果,就目前来看,我也不想知道。
顺便说一句,转型数据类型,可以简单的用 "" + var
解决。
补充回复(后面回复居然不支持表格)
看看 MDN 上 typeof 的说明,结果都是小写的字符串,我个人觉得都是小写比较起来方便。
Type | Result |
---|---|
Undefined | "undefined" |
Null | "object"" (see below)" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (new in ECMAScript 2015) | "symbol" |
Host object (provided by the JS environment) | Implementation-dependent |
Function object (implements [[Call]] in ECMA-262 terms) | "function" |
Any other object | "object" |
当你想创建一个类的时候,你也许会这样(假设你想创建一个 Person
类):
function Person(){
this.name = arguments[0];
this.age = arguments[1];
this.saySomething = function(){
...
}
...
}
现在我们就可以 new
出不同的 Person
对象了:
new Person("jack");
new Person("mike", 18);
...
然而随着使用时间的推移,你发现 Person
类用的实在是太多了,你感觉每次频繁的 new Person(args...)
实在是麻烦,于是你自己动手修改了 js 引擎,规定 %mike%
为声明一个 Person
对象,等同于 new Person("mike")
。后来,世人们都习惯于 var mike = %mike%;
自己的理解,如有不足,欢迎指正补充