javaScript valueOf和toString方法在不同场景被调用进行数据转换

看了篇英文的。。。。心累

说正事,Objects in JavaScript can be converted to primitives in three contexts:

javaScript对象在以下三种场景中会转换为原始数据类型。(primitives:英文是硬伤,这个单词意思表达的应该和Java中的基本数据类型一个意思,我会叫它元始数据类型、原语、基本数据。。。)

  1. Numeric
  2. String
  3. Boolean
字符串转换(String):
当需要一个对象的字符串表示时,发生字符串转换
如:alert(obj);

String(obj)也会做显示转换

转换规则:
1、存在toString方法,并且返回基本数据,则使用toString的返回值(所有的对象都有toString方法,也就是说正常情况转换执行到这里就结束了)。
2、如果valueOf存在并且返回基本数据,则使用valueOf返回的值
3、否则抛出异常


数值转换(Numeric):
javaScript中的另一种转换,没toString使用广泛,但是内部转换经常用到。

数值转换在以下两种情况发生:
1、需要一个数字的功能:比如Math.sin(obj),isNaN(obj),包括算数运算符:+object (+会强制转换object为Number类型).
2、在比较中,如obj == 'join'
===是例外,因为它不允许做任何类型转换,and also non-strict equality when both arguments are objects, not primitives: obj1 == obj2. 仅当二者只想同一个对象时返回true.

使用Number(obj)时也会有明确的数值转换

具体转换规则:
1、存在valueOf方法并且返回原语,则使用valueOf的值
2、不存在valueOf方法,存在toString方法并且返回原语,则使用toString的值
3、二者都不存在,则抛出异常。

内置对象中,Date同时支持数值转换和字符串转换
alert( new Date() ) // The date in human-readable form
alert( +new Date() ) // Microseconds till 1 Jan 1970

但是大部分对象没有valueOf方法,这意味着大部分数值转换由toString实现,更意味着数值转换并不一定得到Number类型的数据。


boolean转换:
Boolean转换发生在一个Boolean上下文中,如:if(obj),while(obj)

Boolean(obj)同样会有显式的boolean转换

转换规则:

[] == ![]为什么返回true?
表达式先计算右边![],context为boolean下对象为true(即[]为true),所以![]为false
现在变为:[] == false
对象和非对象比较转换为数字比较,右边变为0
左边对象调用toString方法得到""
""转换为数字0
0 == 0 结果为true


这是本人Chinglish翻译的,英语好的点这里http://javascript.info/tutorial/object-conversion

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中,ValueoftoString、toLocaleString 都是 Object 原型链上的方法,可以用来获取对象的值或者转换不同的字符串形式。 1. valueOf(): valueOf() 方法返回一个对象的原始值。当 JavaScript 需要一个对象的原始值时,它会自动调用 valueOf() 方法。如果没有找到原始值,则会尝试调用 toString() 方法。 例如: ```javascript let num = new Number(10); console.log(num.valueOf()); // 10 ``` 这里的 `valueOf()` 返回了 `num` 的原始值,即 `10`。 2. toString(): toString() 方法返回一个对象的字符串表示形式。当 JavaScript 需要将一个对象转换为字符串时,它会自动调用 toString() 方法。 例如: ```javascript let num = new Number(10); console.log(num.toString()); // "10" ``` 这里的 `toString()` 返回了 `num` 的字符串表示形式,即 `"10"`。 3. toLocaleString(): toLocaleString() 方法返回一个对象的本地化字符串表示形式。当 JavaScript 需要将一个对象转换为本地化字符串时,它会自动调用 toLocaleString() 方法。该方法返回的字符串与所在地区的语言和文化相关。 例如: ```javascript let num = new Number(1234567.89); console.log(num.toLocaleString()); // "1,234,567.89" ``` 这里的 `toLocaleString()` 返回了 `num` 的本地化字符串表示形式,即 `"1,234,567.89"`,与所在地区的语言和文化相关。 总之,这三个方法都是用来获取对象的值或者转换不同的字符串形式,但是具体使用要看实际情况和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值