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

为什么Javascript原语值(例如name=“John”)具有属性和方法?,javascript,Javascript,我正在学习JS中基本数据类型和引用数据类型之间的区别,并且被基本值搞糊涂了,因为一方面基本值没有属性或方法,但另一方面我能够在基本类型上执行属性或方法,如length或trim,例如John.length或John.toUpperCase。它们没有。 基元值既没有属性也没有方法 但当你这么做的时候 var s = " a "; var b = s.trim(); 仅对于此操作,s的值被提升为字符串对象,而不是基本字符串 数字和布尔值也是一样的 您可以使用以下代码检查您是否真的将属性附加到基元值

我正在学习JS中基本数据类型和引用数据类型之间的区别,并且被基本值搞糊涂了,因为一方面基本值没有属性或方法,但另一方面我能够在基本类型上执行属性或方法,如length或trim,例如John.length或John.toUpperCase。

它们没有。 基元值既没有属性也没有方法

但当你这么做的时候

var s = " a ";
var b = s.trim();
仅对于此操作,s的值被提升为字符串对象,而不是基本字符串

数字和布尔值也是一样的

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

var s = "a";
s.prop = 2;
console.log(s.prop); // logs undefined
它记录未定义的日志,因为该属性附加到临时对象(字符串的实例)而不是附加到s。如果你想保留财产,你早就这么做了

var s = new String("a");
s.prop = 2;
console.log(s.prop); // logs 2
他们没有。 基元值既没有属性也没有方法

但当你这么做的时候

var s = " a ";
var b = s.trim();
仅对于此操作,s的值被提升为字符串对象,而不是基本字符串

数字和布尔值也是一样的

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

var s = "a";
s.prop = 2;
console.log(s.prop); // logs undefined
它记录未定义的日志,因为该属性附加到临时对象(字符串的实例)而不是附加到s。如果你想保留财产,你早就这么做了

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

他们没有。但是,无论何时访问它们上的属性方法,它们都隐式地指向包装器对象

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

他们没有。但是,无论何时访问它们上的属性方法,它们都隐式地指向包装器对象

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

+1个临时对象升级的优秀示例+1个临时对象升级的优秀示例。