在JavaScript中,String是原始值。 但也是一个字符串对象... 原始值是直接放入变量的值。作为原始值的JavaScript和String
所以我的问题是:
var d = "foo";
并ð包含foo的直接或字符串对象像其他语言的参考?
谢谢。
在JavaScript中,String是原始值。 但也是一个字符串对象... 原始值是直接放入变量的值。作为原始值的JavaScript和String
所以我的问题是:
var d = "foo";
并ð包含foo的直接或字符串对象像其他语言的参考?
谢谢。
我认为Javascript中的每个变量实际上代表一个对象。即使一个函数是一个对象。
找到this关于JavaScript的变量页,看来:
原始类型的JavaScript是布尔值,数字和文本。
我相信在Javascript中没有原语,至少在Java的意义上 - 一切都是某种对象。 所以是的,它是一个对象的引用 - 如果扩展字符串对象,d
将具有该扩展名。
如果您指的是由语言提供的那些类型中的原语,那么您有几个布尔值,数字,字符串和日期都是由该语言定义的。
如果我理解正确,d
将包含字符串文字“foo”,而不是对对象的引用。然而,JavaScript引擎将有效地投字面来的String
实例在必要的时候,这就是为什么你可以调用的String.prototype
方法对字符串字面量:
"some string".toUpperCase(); //Method of String.prototype
从MDN下面的代码片段可能有助于进一步解释(强调):
字符串常量(双或单引号表示)和字符串 从字符串返回在非构造背景(即调用,无需使用new关键字 )是原始字符串。 JavaScript自动地将 转换为基本字符串和字符串对象,因此可以使用 字符串对象方法来处理基本字符串。在基元字符串上调用 方法或发生属性查找 的上下文中,JavaScript将自动包装字符串基元,并调用该方法或执行属性查找。
这一切都在specification中详细解释,但它不是很容易阅读。我最近问了一个related question(关于为什么有可能做到上述),所以它可能值得阅读(非常)详细的答案。
如果定义
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
不一定。某些类型的原始(文字)的类型和价值获得通过。其他对象(甚至功能,是)是引用类型... – FarligOpptreden 2012-02-15 08:30:04