繁体   English   中英

JavaScript和String作为原始值

[英]JavaScript and String as primitive value

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

所以我的问题是:

var d = "foo";

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

谢谢。

如果我理解正确, d将包含字符串文字“foo”,而不是对象的引用。 但是,JavaScript引擎会在必要时将文字有效地转换为String的实例,这就是为什么你可以在字符串文字上调用String.prototype方法:

"some string".toUpperCase(); //Method of String.prototype

来自MDN的以下片段可能有助于进一步解释(重点补充):

字符串文字 (用双引号或单引号表示)和从非构造函数上下文中的String调用返回的字符串(即,不使用new关键字) 是原始字符串 JavaScript自动转换基元和String对象,因此可以对原始字符串使用String对象方法。 在要在原始字符串上调用方法或发生属性查找的上下文中,JavaScript将自动包装字符串原语并调用方法或执行属性查找。

这在说明书中都有详细解释,但阅读起来并不容易。 我最近问了一个相关的问题 (关于为什么可以做到这一点),所以可能值得阅读(非常)详细的答案。

如果你定义

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

我认为Javascript中的每个变量实际上都代表一个Object。 甚至函数也是一个Object。

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

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

找到这个关于javascript变量的页面,似乎是:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM