当前位置: 首页 > 面试题库 >

Javascript字符串不是对象吗?

廖君昊
2023-03-14
问题内容

Douglas Crockford喜欢说在javascript原型面向对象语言中不需要new

他解释说,new添加这些代码只是为了使来自基于类(即“ 经典 ”)的面向对象的编程语言的人们感到某种程度的舒适:

JavaScript中,我们很难new

JavaScript是一种原型语言,但是它有一个new运算符,试图使它看起来像古典语言。这往往会使程序员感到困惑,从而导致一些有问题的编程模式

您无需new Object()在JavaScript中使用。请改用对象文字{}

好的:

  • new
  • {}

但后来评论员维托·德·阿劳霍指出,两者并不相同。他举了一个例子,显示a string不像是object

字符串对象和字符串值不是同一件事:

 js> p = "Foo"
 Foo
 js> p.weight = 42
 42
 js> p.weight // Returns undefined

js> q = new String("Foo")
 Foo
 js> q.weight = 42
 42
js> q.weight
 42

字符串值不能具有新属性。同一件事对其他类型也有效。

这里string不是an发生了object什么?我会将javascript与其他所有语言混为一谈吗?


问题答案:

“一切都是对象” ……这是围绕该语言存在的重大误解之一。

并非 所有事物 都是对象,我们称之为 原始值 ,即字符串,数字,布尔值,空值和未定义

没错,字符串是 原始值 ,但是您可以访问从其继承的所有方法,String.prototype就好像它是一个对象一样。

属性访问器运算符(点和括号符号)将字符串值临时转换为String对象,以便能够访问这些方法,例如:

"ab".charAt(1); // "b"

幕后发生的事情是这样的:

new String("ab").charAt(1); // "b", temporal conversion ToObject

与其他原始值(例如Boolean和)一样Number,有 对象包装器 ,它们只是包含原始值的对象,如您的示例所示:

var strObj = new String("");
strObj.prop = "foo";

typeof strObj; // "object"
typeof strObj.prop; // "string"

当使用原始时:

var strValue = "";
strValue.prop = "foo";

typeof strValue; // "string"
typeof strValue.prop; // "undefined"

再次发生是因为上面第二行的属性访问器创建了一个新的时间对象,如下所示:

var strValue = "";
new String(strValue).prop = "foo"; // a new object which is discarded
//...


 类似资料:
  • 问题内容: jshashtable状态: JavaScript的内置对象的确使用方括号表示属性来提供哈希表功能,前提是您的键是字符串或数字: 据我所知,键只是字符串,(因为数字无论如何都被强制转换为字符串)。我只想检查一下,确保上面所说的是假的(因为键不能是数字)。 ECMA标准是否对此做了任何说明。 还是实现特定于浏览器? 问题答案: JavaScript的内置对象确实使用属性的方括号表示法提供

  • 问题内容: 阅读了SCJP Tip Line的作者Corey McGlone在javaranch网站上的文章后,我都感到困惑。从字面上看是Strings,由Kathy Sierra(javaranch的联合创始人)和Bert Bates共同编写的《 SCJP Java 6程序员指南》。 我将尝试引用Corey先生和Kathy Sierra女士对String Literal Pool的引用。 1.根

  • 本文向大家介绍JavaScript 字符串是unicode,包括了JavaScript 字符串是unicode的使用技巧和注意事项,需要的朋友参考一下 示例 所有JavaScript字符串都是unicode! JavaScript中没有原始字节或二进制字符串。为了有效地处理二进制数据,请使用类型化数组。

  • 问题内容: 我一直在纠缠于ECMA-262标准( ECMAScript语言规范, 第三版,如果对此很重要- 在字符串类型/字符串对象的第三版和第五版之间,我没有发现任何区别)。 有件事让我感到困惑:字符串类型和字符串对象之间的区别。是的,我知道 字符串类型 是16位UTF-16单元序列, 字符串对象 是内置对象,其内部 Class 属性设置为“ String”,内部 Value 属性设置为的意义上

  • 问题内容: 您是否知道将Javascript对象编码为可通过请求传递的快速简单的方法? 不,没有其他框架-只是纯Javascript :) 问题答案: 像这样? 编辑:这也将转换递归对象(使用php“ array”表示法作为查询字符串)

  • 问题内容: 我想将Javascript对象编码为JSON字符串,但遇到了很多困难。 对象看起来像这样 我想将其放入JSON字符串以将其放入ajax请求中。 你明白了。不管我做什么,都行不通。所有JSON编码器(如json2等)都会产生 好吧,那对我没有帮助。基本上我想拥有类似php 函数的功能。 问题答案: 除非定义了变量,否则可能是造成您麻烦的原因。这样的事情会做你想要的: 您也可以一次完成所有