valueOf:引用類型中除了Date,valueOf()會返回字符串外傻挂,其他的都是返回this乘碑。
對于常見內(nèi)置對象:Date, Array, Math, Number, Boolean, String, RegExp, Function的valueOf()
:
-
對于Number、Boolean金拒、String兽肤,會變成相應(yīng)的原始值
var num = new Number('123'); num.valueOf(); // 123 var str = new String('12df'); str.valueOf(); // '12df' var bool = new Boolean('fd'); bool.valueOf(); // true
-
Date會轉(zhuǎn)換為日期的毫秒的形式的數(shù)值
var a = new Date(); a.valueOf(); // 1532234132475
-
其他的都是this,即對象本身
var a = new Array(); a.valueOf() === a; // true var b = new Object({}); b.valueOf() === b; // true
toString:普通對象和Math對象的toString是返回他本身的類型即[object Object/Math]
绪抛,其他都有自己的toString资铡,可返回相對有意義的返回值。
-
Number幢码、Boolean笤休、String、Array症副、Date宛官、RegExp、Function這幾種構(gòu)造函數(shù)生成的對象瓦糕,通過toString轉(zhuǎn)換后會變成相應(yīng)的字符串的形式底洗,因?yàn)檫@些構(gòu)造函數(shù)上封裝了自己的toString方法。
Number.prototype.hasOwnProperty('toString'); // true Boolean.prototype.hasOwnProperty('toString'); // true String.prototype.hasOwnProperty('toString'); // true Array.prototype.hasOwnProperty('toString'); // true Date.prototype.hasOwnProperty('toString'); // true RegExp.prototype.hasOwnProperty('toString'); // true Function.prototype.hasOwnProperty('toString'); // true var num = new Number('123sd'); num.toString(); // 'NaN' var str = new String('12df'); str.toString(); // '12df' var bool = new Boolean('fd'); bool.toString(); // 'true' var arr = new Array(1,2); arr.toString(); // '1,2' var d = new Date(); d.toString(); // "Sun Jul 22 2018 12:38:42 GMT+0800 (中國標(biāo)準(zhǔn)時間)" var func = function () {} func.toString(); // "function () {}"
-
其他(例如Object咕娄,Math)都是返回該對象的類型亥揖。
var obj = new Object({}); obj.toString(); // "[object Object]" Math.toString(); // "[object Math]"
toString
類型 | 轉(zhuǎn)換后結(jié)果 |
---|---|
undefined | "undefined" |
null | "null" |
boolean | "true" / "false" |
number | 數(shù)值類型的字符串 |
Array (本質(zhì)上也是object) | 把[ 和 ] 全部去掉,剩下的元素用','隔開的字符串 |
object | 根據(jù) valueOf / toString |
只有普通Object和Math對象沒有自己的toString圣勒,所以返回的是"[object Object]"這樣子的费变。
其他的話,返回的是有意義的結(jié)果圣贸。
toNumber
類型 | 轉(zhuǎn)換后結(jié)果 |
---|---|
undefined | NaN |
null | 0 |
boolean | 0 / 1 |
number | 本身 |
String | 空串和空格=0挚歧,數(shù)值型字符串=數(shù)值,普通字符串=NaN |
object | 無(貌似) |
- 不同類型進(jìn)行
+ - * / ==
會先轉(zhuǎn)化為數(shù)字類型吁峻,在運(yùn)算滑负。 -
+
不僅是算數(shù)運(yùn)算符,也可以是字符串拼接用含,當(dāng)字符串不是純數(shù)字時會進(jìn)行拼接矮慕。 - 比較特殊的是:null == undefined。要比較相等性之前啄骇,不能將 null 和 undefined 轉(zhuǎn)換成其他任何值痴鳄,并且規(guī)定null 和 undefined 是相等的。null 和 undefined都代表著無效的值缸夹。
-
==
在比較的時候先轉(zhuǎn)換數(shù)據(jù)類型痪寻,若等式兩邊數(shù)據(jù)類型不相同螺句,將會往數(shù)值類型方向轉(zhuǎn)換后再進(jìn)行比較 -
==
兩邊都是對象時,比較的是他們的地址
當(dāng)我們進(jìn)行強(qiáng)轉(zhuǎn)時橡类,發(fā)生了什么壹蔓?
在JavaScript中,如果想要將對象轉(zhuǎn)換成基本類型時猫态,也就是所謂的拆箱時佣蓉,會調(diào)用toPrimitive()。
toPrimitive(input,preferedType?) // 輸入值,期望轉(zhuǎn)換的類型
toPrimitive
preferedType為空時亲雪,日期會被認(rèn)為是字符串勇凭,而其他的值會被當(dāng)做Number。