js中 toString() 函数与valueOf() 函数使用与区别
在JavaScript中,几乎所有的数据类型都是对象,除了null和undefined。这些对象的实例都继承自一个共同的Object原型对象,因此它们也会同时继承Object原型对象上的方法和属性。其中,toString()函数和valueOf()函数是两个非常重要的方法,下面我们来仔细了解一下它们的使用和区别。
toString() 函数
toString()函数是Object原型对象上的一个方法,它将一个对象的值转换为一个字符串。通常情况下,我们调用一个对象的toString()方法时,它将返回的是"[object Object]"这样的字符串,这并不是我们想要的结果。因此,对于不同类型的对象,我们需要分别处理它们的toString()方法。
对于字符串、数字、布尔值和函数对象,它们的toString()方法的返回结果都比较好理解。例如:
var str = "Hello World";
console.log(str.toString()); // "Hello World"
var num = 123;
console.log(num.toString()); // "123"
var bool = true;
console.log(bool.toString()); // "true"
function foo() {
console.log("foo");
}
console.log(foo.toString()); // "function foo() {\n console.log(\"foo\");\n}"
对于数组和对象来说,它们的toString()方法的结果通常比较特殊。对于数组对象来说,它的toString()方法将返回一个字符串,其中包含了数组中所有元素的值,多个值之间用逗号分隔。例如:
var arr = [1, 2, 3];
console.log(arr.toString()); // "1,2,3"
对于对象来说,默认情况下调用toString()方法将返回"[object Object]"。如果我们想要自定义对象的toString()方法,可以通过将对象的toString属性设置为一个函数来实现。例如:
var obj = {
name: "Tom",
age: 18,
toString: function () {
return "My name is " + this.name + ", age is " + this.age;
}
};
console.log(obj.toString()); // "My name is Tom, age is 18"
valueOf() 函数
valueOf()函数也是Object原型对象上的一个方法,它将一个对象转换为它的原始值。对于数值、字符串和布尔类型的对象,它们的valueOf()方法的返回结果就是对应的基本数据类型值,例如:
var num = new Number(123);
console.log(num.valueOf()); // 123
var str = new String("Hello World");
console.log(str.valueOf()); // "Hello World"
var bool = new Boolean(true);
console.log(bool.valueOf()); // true
对于对象和数组来说,它们的valueOf()方法的结果通常并不是我们想要的值。对于数组对象来说,它的valueOf()方法返回的是数组对象本身,而不是它的元素值。例如:
var arr = [1, 2, 3];
console.log(arr.valueOf()); // [1, 2, 3]
对于对象来说,默认情况下调用valueOf()方法将返回对象本身。如果我们想要自定义对象的valueOf()方法,可以通过将对象的valueOf属性设置为一个函数来实现。例如:
var obj = {
name: "Tom",
age: 18,
valueOf: function () {
return this.age;
}
};
console.log(obj.valueOf()); // 18
这里的valueOf()方法将返回对象obj中age属性的值,而不是对象本身。
区别
总的来说,toString()函数和valueOf()函数都是用来将对象转换为基本数据类型值的方法,但是它们的返回结果是不同的。toString()方法的返回结果通常是一个字符串,它将对象转换为符合人类可读的格式,而valueOf()方法的返回结果通常是一个基本数据类型值,它将对象转换为符合计算机运算的格式。
此外,对于很多JavaScript内置对象来说,它们默认的toString()和valueOf()方法的返回结果都不是我们想要的值。因此,我们可以通过自定义这些对象的toString()和valueOf()方法来获得我们想要的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中toString()函数与valueOf()函数使用与区别 - Python技术站