美文网首页饥人谷技术博客
认识JS隐式类型转换

认识JS隐式类型转换

作者: cccccchenyuhao | 来源:发表于2018-10-11 13:24 被阅读7次

先来看看几个例子

 var a = true + false; 
console.log(a);     //1 (true转化为1,false转化为0)

if (" ") {
    console.log("true");
} else {
    console.log("false");
}          //true 非空字符串转化为true

if ("") {
    console.log("true");
} else {
    console.log("false");
}       //false 空字符串转化为false

var a = {
  valueOf: function () {
     return 1;
  },
  toString: function () {
     return '123'
  }
}
true == a // true;

因为js比较灵活和宽容,所以在一些操作符下其数据类型会做一下类型转换再计算而不是报错。
if(xxx) 判断和 == +都是比较常见的存在隐式类型转换的操作,以下总结了一些规律:

+操作符

  • 在两个操作数都是数字的时候,会做加法运算
  • 两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
  • 在参数有对象的情况下会调用其valueOf或toString方法
  • 在只有一个字符串参数的时候会尝试将其转换为数字
  • 在只有一个数字参数的时候返回其正数值
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
console.log(+"4");//4 

if (xxx)判断
对于括号里的表达式,会被强制转换为布尔类型

类型 结果
Undefined false
Null false
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true
if ("hello") {        //true
    console.log("hello")
} 

if ("") {         //false
    console.log('empty')
}

if (" ") {         //true
    console.log('blank')
}

var obj = {};
if (obj) {            //true
  console.log(obj)
}

==操作符
对于x == y ,js是如何判断的呢?

x y 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
otherwise otherwise false

toNumber规则

type Result
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

相关文章

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • 认识JS隐式类型转换

    先来看看几个例子 因为js比较灵活和宽容,所以在一些操作符下其数据类型会做一下类型转换再计算而不是报错。if(xx...

  • 类型转换

    js的类型转换分成显示和隐式,显式转换常用类型转换函数进行转换,隐式最多用在条件判断,通常是把字符转为布尔型。类型...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • 隐式类型转换的触发场景

    何为隐式类型转换 在认识js的过程中因为总是会在突然的一个知识点中蹦出一个隐式类型转换,虽说在当时可以清楚地理解,...

  • JavaScript类型转换

    在js中数据类型转换一般分为两种,即强制类型转换和隐式类型转换(利用js弱变量类型转换)。 强制类型转换 即通过使...

  • 隐式转换的规则

    问题:隐式转换的规则是什么 说起JS的隐式转换规则,我们可以说下JS的基础数据类型 JS的七中类型 我们所熟知的J...

  • JS隐式数据类型转换

    隐式数据类型转换介绍 前面有总结过 JS数据类型转换 Number(), toString(), parseInt...

  • 数据类型转换

    写在前面 C/C++编程中常见数据类型转换,包括隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换在以...

  • JavaScript的显式转换和隐式转换

    js的显式转换和隐式转换都是数据类型的转换;js的数据类型是弱类型的,即可以给变量赋值为任意的数据类型,当进行运算...

网友评论

    本文标题:认识JS隐式类型转换

    本文链接:https://www.haomeiwen.com/subject/iwcbaftx.html