为什么Javascript原始值(例如name =“John”)具有属性和方法?

时间:2014-01-09 12:23:42

标签: javascript

我正在学习JS中原始数据类型和引用数据类型之间的区别,并且被原始值混淆,因为一方面原始值没有属性或方法,但另一方面我能够执行属性或方法,如length或trim()原始类型(例如“John”.length或“John”.toUpperCase())。

2 个答案:

答案 0 :(得分:2)

他们没有。 原始值既没有属性也没有方法。

但是当你做的时候

var s = " a ";
var b = s.trim();

仅为此操作将s的值提升为String对象(不是原始字符串)。

数字和布尔值相同。

您可以使用以下代码检查您是否真的将属性附加到原始值:

var s = "a";
s.prop = 2;
console.log(s.prop); // logs undefined

它会记录undefined,因为该属性已附加到临时对象,String的实例,而不是s。如果你想保留房产,那你已经完成了

var s = new String("a");
s.prop = 2;
console.log(s.prop); // logs 2

答案 1 :(得分:2)

他们没有。但是,无论何时访问它们的属性(方法),它们都隐式casted到包装器对象。

var name = "John";
name.toLowerCase(); // typeof name == "string"
// what happens is:
(new String(name)).toLowerCase() // typeof new String(name) == "object"