字符串是Javascript中的原始类型还是对象?

Imr*_*ran 29 javascript

字符串是Javascript中的原始类型还是对象?Source说Undefined,Null,Boolean,Number和String都是Javascript中的原始类型.但它说String也是一个对象.我糊涂了.有人可以解释一下吗?

先感谢您 ;-)

duc*_*cin 26

实际上相同的答案适用于:字符串,数字,布尔值.这些类型的原始版本和对象版本都是在应用程序运行时中强制执行的(在您不知情的情况下).

强迫

JavaScript是弱类型的.这意味着每当您的代码想要使用无效数据类型执行操作(例如向数字添加字符串)时,JavaScript将尝试找到此方案的最佳匹配.

如上所述,这种机制也被称为强制.

基元和属性

您可以找到以下代码令人困惑:

> "hello world".length
11
Run Code Online (Sandbox Code Playgroud)

因为"hello world"是字符串文字,即原语.我们知道原语没有属性.一切都是对的.

那怎么办?强制 - 原语用一个对象(强制)包裹一小部分时间,使用对象的属性,并立即处理对象.

强制双向工作

所以原始元素与它们的对象包装版本一起铸造 - 但它也可以反过来工作.考虑以下代码:

> String("hello ") + String("world")
"hello world"

> Number(2) + 3
5
Run Code Online (Sandbox Code Playgroud)

将对象下移到其原始版本以完成操作.

阅读这个精彩的解释,了解更多.


Ray*_*nos 24

都.

有一个String对象,有字符串文字.

您可以在文字上调用任何字符串方法,并且可以在字符串对象上调用任何字符串方法.

主要的区别是,一个字符串对象生成一个新的对象等等new String("foo") !== new String("foo")

那和String对象是类型"object"而不是"string"

如何检查两者?

if(typeof(s) == "string" || s instanceof String){
  //s is a string (literal or object)
}
Run Code Online (Sandbox Code Playgroud)

在评论中将@Triynko的片段归功于@Triynko

  • 并且不要忘记``string'instanceof String`是false,而`new String()instanceof String`是true.因此,要检查某些变量`s`是否为字符串,您必须检查`typeof(s)=="string"||| s instanceof String` (2认同)

Que*_*tin 5

JavaScript有原始字符串和对象字符串.

> var foo = "foo"
undefined
> var bar = new String("bar");
undefined
> foo
"foo"
> bar
String
> typeof foo
"string"
> typeof bar
"object"
Run Code Online (Sandbox Code Playgroud)