valueOf()

MDN valueOf()

返回值

返回值为该对象的原始值。

JavaScript 调用 valueOf() 方法将对象转换为原始值。你很少需要自己调用 valueOf();当遇到要预期的原始值的对象时,JavaScript 会自动调用它。

默认情况下,valueOf() 方法由 Object 后面的每个对象继承,每个内置的核心对象都会重写此方法以返回合适的值。如果对象没有原始值,则 valueOf() 将返回对象本身。

JavaScript 的许多内置对象都重写了该函数,以实现更适合自身的功能需要。不同类型对象的 valueOf() 方法的返回值和返回值类型均可能不同。

// Array:返回数组对象本身
var array = ['ABC', true, 12, -5];
console.log(array.valueOf() === array); // true

// Date:当前时间距 1970-01-01 00:00:00 UTC 的毫秒数
var date = new Date(2013, 7, 18, 23, 11, 59, 230);
console.log(date.valueOf()); // 1376855519230

// Boolean 包装对象
var newBool = new Boolean(true);
console.log(newBool.valueOf() == newBool);  // true(值相等)
console.log(newBool.valueOf() === newBool); // false(类型不同:boolean vs object)

// Function:返回函数本身
function foo() {}
console.log(foo.valueOf() === foo); // true

var foo2 = new Function('x', 'y', 'return x + y;');
console.log(foo2.valueOf()); // ƒ anonymous(x,y) { return x + y; }

// Object:返回对象本身
var obj = { name: '张三', age: 18 };
console.log(obj.valueOf() === obj); // true

// String 字面量:返回字符串本身
var str = 'http://www.xyz.com';
console.log(str.valueOf() === str); // true

// String 包装对象
var str2 = new String('http://www.xyz.com');
console.log(str2.valueOf() === str2); // false(类型不同)

来源整理自:我的有道云笔记