资讯专栏INFORMATION COLUMN

JavaScript 对象转换之toString和valueOf

eternalshallow / 1178人阅读

摘要:本章主要关注中间两个的结果。一类型转换如果方法存在并且返回原始类型,返回的结果。其他情况,抛出错误。二类型当需要使用时,如等,解释器会尝试将对象转换成对象。三转换在进行布尔比较的时候,比如等等,会进行布尔转换。

开始这个话题之前,我们先看一下下面的几个例子:

parseInt(0.0000004)  // 4
![]==[] //true
["x","y"] == "x,y" //true
alert({name:"mofei"})  //"[object Object]"

关于parseInt()的方法可以查看我之前的文章。本章主要关注中间两个的结果。

一.String类型转换

1.如果toString方法存在并且返回“原始类型”,返回toString的结果。
2.如果toString方法不存在或者返回的不是“原始类型”,调用valueOf方法,如果valueOf方法存在,并且返回“原始类型”数据,返回valueOf的结果。
3.其他情况,抛出错误。

二:Number类型

当需要使用Number时,( 如Math.sin() )等,解释器会尝试将对象转换成Number对象。
通常有如下的情况会触发Number转换:
1.方法参数需要Number的时候,如Math.sin(obj)等
2.对比的时候,如 obj == "abc"
3.运算的时候,如 obj + 123
转换规则如下:
1.如果valueOf存在,且返回“原始类型”数据,返回valueOf的结果。
2.如果toString存在,且返回“原始类型”数据,返回toString的结果。
3.其他情况报错。

三:Boolean转换

在进行布尔比较的时候,比如 if(obj) , while(obj)等等,会进行布尔转换。
布尔转换遵循如下规则:
值 布尔值
true/false true/false
undefined,null false
Number0,NaN 对应 false, 其他的对应 true
String"" 对应false, 其他对应true("0"对应的是true)
Object true

举个比较典型的例子:

[] == ![]  //true

// 首先第一步右边的是逻辑判断![],所以先转成boolean
// [] == !true
// [] == false
// 左边不是原始类型,尝试把左边转成原始类型,变成
// "" == false
// 转成Number
// 0 == 0

总的来说,使用方法就是为了转换类型:对象类型->基本类型 然后进行基本类型的操作。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80803.html

相关文章

  • 进击的 JavaScript(一) 类型转换

    摘要:实际上,我们通常认为是自有类型的唯一成员。比较运算符的操作数可能是任意类型。结果只有,例得到操作值等价的布尔值真值为,假值为等同于,经常称为强制转换。结果返回布尔值的用法是中唯一一个不等于任何值的包括它自己。 说起 js 类型转换,都是头疼吧,晕晕的,但是不行啊,这东西很重要滴! 基础知识 JavaScript的数据类型分为六种,分别为null, undefined, boolean,...

    Scholer 评论0 收藏0
  • Javascript基础-强制类型转换(一)

    摘要:转换为字符串规则如下图代码大致就是普通其他基本类型转为字符串的话,就直接转为其值的字符串表达形式,如果是基本类型的封装对象,会先拆封,然后再转为字符串,如果是普通对象,则会调用其内部的值,如果是极大数和级小数,将会进行一些转化,具体规 转换为字符串规则如下图代码: console.log(String(undefined)); // undefined console.log(Str...

    leon 评论0 收藏0
  • 魔幻语言 JavaScript 系列类型转换、宽松相等以及原始值

    摘要:通过使用其构造函数,可以将一个值的类型转换为另一种类型。如果使用两次,可用于将该值转换为相应的布尔值。 编译自:[1] + [2] – [3] === 9!? Looking into assembly code of coercion.全文从两个题目来介绍类型转换、宽松相等以及原始值的概念: [1] + [2] – [3] === 9 如果让 a == true && a == fa...

    li21 评论0 收藏0
  • 从[]==![]为true来剖析JavaScript各种蛋疼的类型转换

    摘要:将他们放在堆中是为了不影响栈的效率。所以简单数据类型的值直接存放在栈中。可以对比上面那张图默认是调用方法的依,于是等于空字符串。空字符串中国标准时间方法返回对象的原始值,可能是字符串数值或值等,看具体的对象。,需要两个操作数同时转为。 你是否在面试中遇到过各种奇葩和比较细节的问题? []==[] //false []==![] //true {}==!{} //false {}==![...

    Jeff 评论0 收藏0
  • Javascript基础-强制类型转换(二)

    摘要:所以无论还是都会进行类型转换,唯一的区别,就是会置否而不会。这时候,肯定会有人问,假如说我有其他的数据类型呢,又不是数字又不是字符串,比如说数组啊,对象啊,布尔值啥的,那么如果是引用数据类型,则先转为基本数据类型,再进行比较。 上一章主要讲了转换到数字,字符串和布尔类型的一些知识点,那么这一讲接着上面的继续讲。 思考下面这个问题: console.log(+123); // 123 ...

    kk_miles 评论0 收藏0

发表评论

0条评论

eternalshallow

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<