js的隐式转化

  1. 对象和字符串对比,对象.toString()变为字符串
  2. 对象转数字:先调toString()转为字符串,再用Number()函数转为数字
  3. 对象和对象对比不会隐式转换

eg: 

var a = {
  _default: 0,
  toString: function() {
    return ++this._default
  }
}
if(a==1&&a==2&&a==3) {
  console.log('you are win')
}
//输出 you are win

上例中最后进入了if判断中,因为在if判断中,对象a调用重写了的toString方法,并且转化为字符串,最后因为和数字进行对比,再调用对象__proto__上的Number方法转化为数字。所以每一次的对比就对对象a进行了一次调用,++运算也会让值增加,if判断为true最后进入判断中。

 

{}的隐式转换

js中,加法运算的规则很简单,只会触发两种情况:

1.number + number

2.string + string

如果有一个数为string,则将另一个操作数隐式的转换为string,然后通过字符串拼接得出结果。

如果两个都是number类型则直接运算得出结果

如果为布尔值这种简单的数据类型,那么将会转换为number类型来进行运算得出结果

如果操作数为对象或者是数组这种复杂的数据类型,那么就将两个操作数都转换为字符串,进行拼接 。

eg: 

console.log({}+{}) //[object Object][object Object]
console.log({}+[])//[object Object]
console.log(([]+[]).length)//0

Function.prototype.toString()

此方法返回一个表示当前函数源代码的字符串

eg:

let test = function(){}

console.log(test.toString())
//function(){}

 

Function.prototype.length

此属性指明函数的形参个数

eg: 

let test = function() {}

console.log(test.length)
//0

let trys = function(a,b,c) {}
console.log(trys.length)
//3

 

 

 

posted @ 2021-03-10 11:36  luobinziyue  阅读(101)  评论(0编辑  收藏  举报