在JavaScript中,String是原始值。 但也是一个String对象...... 原始值是直接放入变量的值。
所以我的问题是:
var d = "foo";
是否直接包含foo或对其他语言的字符串对象的引用?
感谢。
答案 0 :(得分:6)
如果我理解正确,d
将包含字符串文字“foo”,而不是对象的引用。但是,JavaScript引擎会在必要时将文字有效地转换为String
的实例,这就是为什么你可以在字符串文字上调用String.prototype
的方法:
"some string".toUpperCase(); //Method of String.prototype
来自MDN的以下代码段可能有助于进一步解释(强调添加):
字符串文字(用双引号或单引号表示)和字符串 在非构造函数上下文中从String调用返回(即,没有 使用新关键字)是原始字符串。 JavaScript自动 转换基元和String对象,以便可以使用它 原始字符串的字符串对象方法。在某种情况下 方法将在原始字符串或属性查找上调用 发生时,JavaScript会自动换行字符串原语和 调用方法或执行属性查找。
specification对此进行了详细解释,但这并不容易阅读。我最近问related question(关于为什么可以做上述事情),所以可能值得阅读(非常)详细的答案。
答案 1 :(得分:4)
如果你定义
var d = "foo";
比d
直接包含foo
但是,如果你定义
var S = new String("foo");
然后S
是Object
示例:
var s1 = "1";
var s2 = "1";
s1 == s2 -> true
var S1 = new String("2");
var S2 = new String("2");
S1 == S2 -> false
答案 2 :(得分:2)
我认为Javascript中的每个变量实际上都代表一个Object。甚至函数也是一个对象。
答案 3 :(得分:1)
我找到了两篇有用的文章,详细介绍了here和here。看起来像JavaScript中的原始类型是由VALUE传递的(即当你将函数传递给函数时它会在函数中“沙盒化”并且原始变量的值不会改变),而参考类型被传递,你猜对了,参考文献并将其传递给函数将改变原始变量。
JavaScript中的原始类型是文本(字符串),数字(浮点数/整数),布尔值和NULL(以及可怕的“未定义”类型)。任何自定义对象,函数或标准数组都被视为引用类型。我没有研究过Date类型,但我确信它会属于原始类型。
答案 4 :(得分:0)
找到有关javascript变量的this页面,似乎是:
javascript的原始类型是布尔值,数字和文本。
答案 5 :(得分:0)
我相信Javascript中没有原语,至少在Java意义上 - 一切都是某种对象。
所以是的,它是对象的引用 - 如果你扩展String对象,d
将具有该扩展名。
如果您指的是语言提供的那些类型中的原语,那么您有一些布尔数字,字符串和日期都是由语言定义的。