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 函数的功能。 问题答案: 除非定义了变量,否则可能是造成您麻烦的原因。这样的事情会做你想要的: 您也可以一次完成所有