toString与valueOf方法对比整理

null和undefined

undefinednull没有toStringvalueOf方法。

undefined.toString();   //TypeError: Cannot read property 'toString' of undefined
null.toString();   //TypeError: Cannot read property 'toString' of null

undefined.valueOf();    //TypeError: Cannot read property 'valueOf' of undefined
null.valueOf(); //TypeError: Cannot read property 'valueOf' of null

布尔型

布尔型数据toString返回对应的字符串。valueOf返回原值。

console.log(true.toString());   //'true'
console.log(false.toString());  //'false'

console.log(true.valueOf());    //true
console.log(false.valueOf());   //false

字符串

返回原值

console.log('123'.toString());  //'123'
console.log('123'.valueOf());   //'123'

数值

整数直接跟.toString().valueOf形式,会报错,提示无效标记。因为整数后的点被识别为小数点。所以尽量加括号,加括号后,toString返回字符串,valueOf返回原值。

console.log(1.valueOf());
console.log(1.toString());  //SyntaxError: Invalid or unexpected token

console.log((1).valueOf());     //1
console.log((1).toString());    //'1'

-0valueOf值是-0,而-0toString()值是'0'

console.log((-0).valueOf());    //-0
console.log((-0).toString());   //'0'

console.log((+0).valueOf());    //0
console.log((+0).toString());   //'0'

valueOf

直接返回原值。(有正号的会被省略)

console.log(NaN.valueOf());         //NaN
console.log(+Infinity.valueOf());   //Infinity
console.log(-Infinity.valueOf());   //-Infinity

console.log(1.23.valueOf());    //1.23
console.log(-1.23.valueOf());    //-1.23
console.log(+1.23.valueOf());    //1.23

toString

  • 带正负号的浮点数与Infinity(没有加小括号),相当于先进行toString运算,再添加正负号,转换为数字。
console.log(+1.23.toString());      //1.23
console.log(-1.23.toString());      //-1.23
console.log(+Infinity.toString());  //Infinity
console.log(-Infinity.toString());  //-Infinity
  • 正浮点数(不带+号),加引号直接返回
console.log(1.23.toString());   //'1.23'

对象

toString

对象Object类型及自定义对象类型 加括号(不加会报错)返回[object Object]。

{}.toString();  //SyntaxError: Unexpected token .

常使用Object.prototype.toString()进行类型识别。

console.log(Object.prototype.toString.call('123'));             //'[object String]'
console.log(Object.prototype.toString.call(123));               //'[object Number]'
console.log(Object.prototype.toString.call(true));              //'[object Boolean]'
console.log(Object.prototype.toString.call(undefined));         //'[object Undefined]'
console.log(Object.prototype.toString.call(null));              //'[object Null]'

console.log(Object.prototype.toString.call({}));                //'[object Object]'
console.log(Object.prototype.toString.call(function () {}));    //'[object Function]'
console.log(Object.prototype.toString.call([]));                //'[object Array]'
console.log(Object.prototype.toString.call(new Date));          //'[object Date]'
console.log(Object.prototype.toString.call(/\w/));              //'[object RegExp]'

可以识别标准类型及内置对象类型,不能识别自定义类型

function Person(){};
console.log(Object.prototype.toString.call(new Person));    //[object Object]

还能进行其他一些识别,如识别arguments或DOM元素

(function () {
    console.log(Object.prototype.toString.call(arguments)); //'[object Arguments]'
})();
console.log(Object.prototype.toString.call(document)); //'[object HTMLDocument]'

valueOf

返回原对象

console.log(({}).valueOf());    //{}

函数

toString

对一个自定义函数使用toString()方法时,可以得到该函数的源代码。对内置函数使用toString()方法时,得到'[native code]``。因此,可以使用toString()`方法区分自定义函数和内置函数。

function f() {alert(1);};
console.log(f.toString());  //'function f() {alert(1);}'

console.log(Function.toString.toString());  //'function toString() { [native code] }'

valueOf
返回原函数

function f() {alert(1);};
console.log(f.valueOf());  //ƒ f() {alert(1);}

console.log(Function.toString.valueOf());  //ƒ toString() { [native code] }

数组

toString

返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串

console.log([].toString());         //''
console.log([1].toString());        //'1'
console.log([1, 2, 3].toString());  //'1,2,3'
console.log([{}, 1, Function].toString());  //'[object Object],1,function Function() { [native code] }'

valueOf

返回原数组

console.log([].valueOf());         //[]
console.log([1].valueOf());        //[1]
console.log([{}, 1, Function].valueOf());  // [{…}, 1, ƒ]

Date

toString

返回当前时区的时间的字符串表示

console.log(new Date().toString()); //'Mon Jan 22 2018 17:29:22 GMT+0800 (中国标准时间)'

valueOf

返回一直数字值,是当前时间值。

console.log(new Date().valueOf());  //1516613677784

正则表达式

toString

返回正则表达式字面量的字符串表示。

console.log(/ab/g.toString());  //'/ab/g'

valueOf
返回原正则对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值