typeof new String("aaa")==="object"?一切都是对象,但有原始类型?

Soo*_*ead 9 javascript prototype function object

会有很多问题需要澄清,所以我会尝试用数字标记它们,以便更容易回应它.

最近我一直在研究javascript.有一个主题是"一切都是对象".

  1. 在我的"javascript解释"中,这意味着在其原型链的开头,一切都有"对象".它是否正确?

  2. 但是,我们的基本类型(string,number,boolean,null,undefined)?他们是对象吗?我可以打个电话"aaa".length.这是如何运作的?

  3. 函数是根据此实现[[Call]]的对象 .那是什么意思?(我认为这是关于fun.call(这个,arg1)的东西,但帮助我理解这一点.

    还有typeof运营商.我之前已将其与MDN联系起来,但有些事情令人困惑.

  4. typeof "aaa" === "string"typeof String("aaa") === "string".这似乎是可以预料的,但String("aaa")会返回什么?我猜它以某种方式解析输入并从中返回一个字符串原语.它是否正确?

  5. typeof new String("aaa") === "object"什么?请向我解释其原型链.我在哪个原型和哪个原型上有"aaa"原始字符串值?它有什么不同typeof String("aaa")

我已经阅读并观看了很多关于这个主题的内容,我认为我需要澄清这些内容.

同样在你的答案中,如果你链接一个外部资源,请总结它的重要部分,并说明它的含义,因为我一直在阅读ecmascript规范,它们很长:).

此外,如果javascript的版本有所不同,请说明.

And*_*y E 13

1 \在我的"javascript解释"中,这意味着在它的原型链的开头,一切都有"对象".它是否正确?

是的,不是.默认情况下,所有对象都继承自Object.使用ES5可能Object.create有一个不继承的对象Object,但它仍然是一个对象.

2 \但原始类型(字符串,数字,布尔值,空值,未定义)怎么样?他们是对象吗?我可以称之为"aaa".length.这是如何运作的?

误解一切都是JavaScript中的对象.基元不是对象,但可以转换为对象.使用.运算符时,左操作数将转换为对象(如果可能).

3 \功能是根据此实现[[Call]]的对象.那是什么意思?(我认为这是关于fun.call(这个,arg1)的东西,但帮助我理解这一点.

[[Call]]是ECMAScript实现用于将对象标记为函数的内部方法.它与它没有直接关系Function.prototype.call,它本身也是一个标有的功能[[Call]].见13.2.1 [[Call]].

4\typeof"aaa"==="string"和typeof String("aaa")==="string".这似乎是可以预料的,但String("aaa")会返回什么?我猜它以某种方式解析输入并从中返回一个字符串原语.它是否正确?

String(),当不用作构造函数时,将其参数转换为字符串基元.所以String("aaa")是一样的"aaa".toString().在这种情况下,这是多余的和不必要的.

5\typeof new String("aaa")==="对象"什么?请向我解释它的原型链.我在哪个原型和哪个原型上有"aaa"原始字符串值?它与typeof String("aaa")有何不同?

String()用作构造函数返回一个继承自的对象String(),正如您所期望的那样.字符串基元字符串对象之间存在差异.

当您对某些事情感到困惑时,几乎所有问题都可以通过阅读规范来解答.为方便起见,在线提供了带注释的规范版本.

  • 我给了它10分钟直到你的回答突然出现......我觉得让你失望了13 :(. (3认同)
  • 有一个对象在其原型链中没有Object原型对象:Object原型对象本身. (2认同)