JavaScript和String作为原始值

时间:2012-02-15 07:59:54

标签: javascript

在JavaScript中,String是原始值。 但也是一个String对象...... 原始值是直接放入变量的值。

所以我的问题是:

var d = "foo";

是否直接包含foo或对其他语言的字符串对象的引用?

感谢。

6 个答案:

答案 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");

然后SObject

示例:

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)

我找到了两篇有用的文章,详细介绍了herehere。看起来像JavaScript中的原始类型是由VALUE传递的(即当你将函数传递给函数时它会在函数中“沙盒化”并且原始变量的值不会改变),而参考类型被传递,你猜对了,参考文献并将其传递给函数将改变原始变量。

JavaScript中的原始类型是文本(字符串),数字(浮点数/整数),布尔值和NULL(以及可怕的“未定义”类型)。任何自定义对象,函数或标准数组都被视为引用类型。我没有研究过Date类型,但我确信它会属于原始类型。

答案 4 :(得分:0)

找到有关javascript变量的this页面,似乎是:

  

javascript的原始类型是布尔值,数字和文本。

答案 5 :(得分:0)

我相信Javascript中没有原语,至少在Java意义上 - 一切都是某种对象。 所以是的,它是对象的引用 - 如果你扩展String对象,d将具有该扩展名。

如果您指的是语言提供的那些类型中的原语,那么您有一些布尔数字,字符串和日期都是由语言定义的。