JavaScript valueOf() 方法详解
valueOf()
valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。
所有主要浏览器都支持valueOf()。
Number对象
valueOf() 方法可以返回数字的原始值。
语法:
number.valueOf()
// 返回一个数的原始值
返回一个 Number 对象的基本数字值:
var num = 15;
var n = num.valueOf();
console.log(n) // 15
String 对象
valueOf() 方法可返回 String 对象的原始值。
语法:
string.valueOf()
返回 String 对象的原始值:
var str="Hello world!";
document.write(str.valueOf()); // Hello world!
Boolean 对象
valueOf() 方法可返回 Boolean 对象的原始值。返回 true 或者 false
语法:
boolean.valueOf()
返回 Boolean 对象的原始值:
var bool = new Boolean(0);
var myvar = bool.valueOf();
console.log(myvar) // false
Array 对象
valueOf() 方法返回 Array 对象的原始值。
该原始值由 Array 对象派生的所有对象继承。
语法:
array.valueOf()
// 返回数组值
valueOf() 是数组对象的默认方法。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var v = fruits.valueOf();
console.log(v) // Banana,Orange,Apple,Mango
// fruits.valueOf()与 fruits返回值一样。
注意: valueOf() 方法不会改变原数组。
Date 对象
valueOf() 方法返回 Date 对象的原始值。
语法:
Date.valueOf()
// 返回date 的毫秒表示。返回值和方法 Date.getTime 返回的值相等,返回1970年1月1日午夜以来的毫秒数。
返回 Date 对象的原始值:
var d = new Date();
var n = d.valueOf();
console.log(n) // 1707027925264
注意:原始值返回1970年1月1日午夜以来的毫秒数!
隐式转换
var arr = ["1", "2"]
var str = "1,2"
console.log(arr == str) // true
valueOf() 方法重写
Object.prototype.valueOf = function () {
console.log("valueOf()方法重写")
}
console.log(null == undefined) // true
console.log(1 == "1"); // true
console.log(1 == true); // true
console.log(["1", "2"] == "1,2") // false
console.log(["1"] == 1) // false