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