javascript – typeof new String(“aaa”)===“object”?一切都是一个对象,但是有原始的类型?

前端之家收集整理的这篇文章主要介绍了javascript – typeof new String(“aaa”)===“object”?一切都是一个对象,但是有原始的类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
将有很多需要澄清的问题,所以我会尝试用数字标记它们,以便更容易回应.

最近我一直在学习javascript很多.有一个关于“一切都是一个对象”的主题.

>在我的“javascript的解释”中,这意味着在原型链的开始,所有东西都有“对象”.它是否正确?
>但是,原始类型(string,number,boolean,null,undefined)呢?他们是对象吗?我可以调用“aaa”.length例如.这是如何工作的?
>函数是实现[[Call]] according to this的对象.这是什么意思? (我认为这是一个关于fun.call(这个,arg1),但是帮助我理解这一点.

还有typeof运算符.我从MDN之前就把它挂了起来,但有些事情让人困惑.
> typeof“aaa”===“string”和typeof String(“aaa”)===“string”.这似乎很有期望,但是String(“aaa”)会返回什么?我想它会以某种方式解析输入,并从中返回一个字符串原语.它是否正确?
> typeof new String(“aaa”)===“object”什么?请向我解释它的原型链.在哪里和哪个原型我有这个“aaa”原始字符串值?与typeof String(“aaa”)有什么不同?

我已经看了很多关于这个问题的事情,我想我需要这些澄清.

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

另外如果javascript的版本有差异,请说明.

解决方法

1\ In my “interpretation of javascript” that means everything has the “object” in the beginning of it’s prototype chain. Is this correct?

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

2\ But what about the primitive types (string,undefined)? Are they objects? I can call “aaa”.length for example. How does that work?

这是一个误解,一切都是JavaScript中的一个对象.原语不是对象,而是可以转换为对象.当…的时候 .操作符被使用,左操作数被转换为一个对象(if possible).

3\ Functions are objects implementing [[Call]] according to this. What does that mean? (I’m thinking it’s something about fun.call(this,but help me understand this.

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

4\ typeof “aaa” === “string” and typeof String(“aaa”) === “string”. This seems quite expectable,but what does String(“aaa”) return? I guess it parses the input somehow and returns a string primitive from it. Is this correct?

String(),当不用作构造函数时,converts its argument to a string primitive.所以String(“aaa”)与“aaa”.toString()相同.在这种情况下,这是多余的和不必要的.

5\ typeof new String(“aaa”) === “object” What? Please explain it’s prototype chain to me. Where and on which prototype do I have the “aaa” primitive string value on this? How does it differ from typeof String(“aaa”)?

String()作为构造函数返回一个继承自String()的对象,就像您所期望的那样. string primitivestring object之间有区别.

几乎所有的问题都可以通过阅读规范来解答,只要你对某件事情感到困惑.为了方便起见,有一个注释版本的规范available online.

原文链接:https://www.f2er.com/js/153725.html

猜你在找的JavaScript相关文章