回答:
1. JavaScript对象转原始值
在JavaScript中,当一个对象被转换成原始类型时,会调用该对象的valueOf()
和toString()
方法。如果这两个方法都不存在或没有返回原始值,则会抛出TypeError异常。
1.1 valueOf()
方法
对于大多数JavaScript对象,valueOf()
方法会返回对象本身。但是对于包装对象,如String
、Number
和Boolean
,valueOf()
方法会返回包装对象所代表的原始值。
例如:
var num = new Number(42);
console.log(num.valueOf()); // 42
1.2 toString()
方法
toString()
方法会将一个对象转换成字符串形式。大多数JavaScript对象的toString()
方法都会返回[object Object]
,这对于调试是没有什么用处的。因此,我们需要覆盖这个默认行为,来让它返回具体的、有意义的字符串。
例如:
var person = {
name: '张三',
age: 20,
toString: function() {
return this.name + ', ' + this.age + '岁';
}
};
console.log(person.toString()); // "张三, 20岁"
2. 示例说明
示例一
假设我们有一个Person
类,我们要将它转换成字符串形式,首先可以尝试使用toString()
方法:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
toString() {
return this.name + ', ' + this.age + '岁';
}
}
const person = new Person('张三', 20);
console.log(person.toString()); // "张三, 20岁"
如果我们将该对象进行隐式类型转换,比如console.log输出时,会自动调用toString()
方法,得到如下结果:
console.log(person); // Person { name: '张三', age: 20 }
可以看到,输出的结果是对象的类型和属性,如果想输出具体内容,需要将toString()
方法覆盖。
示例二
假设我们有一个Product
类,它代表一个商品,我们想获取它的价格。可以使用valueOf()
方法来获取它的价格:
class Product {
constructor(name, price) {
this.name = name;
this.price = price;
}
valueOf() {
return this.price;
}
}
const product = new Product('苹果', 5.6);
console.log(product.valueOf()); // 5.6
如果我们将该对象进行隐式类型转换,比如使用Number()
进行显式类型转换,会自动调用valueOf()
方法,得到如下结果:
console.log(Number(product)); // 5.6
可以看到,输出的结果是商品的价格。如果想获取其它属性,需要在类中覆盖valueOf()
方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JavaScript对象转原始值 - Python技术站