• 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

  • 相关阅读:
    将文件写进数据库的方法
    立个Flag
    JQuery_学习1
    js制作一个简单的选项卡
    输出数据库中的表格的内容(pdo连接)
    不饮鸡汤的寂寞先生
    详细谈Session
    详细谈Cookie
    php字符串操作函数练习2
    ios开发网络学习五:MiMEType ,多线程下载文件思路,文件的压缩和解压缩
  • 原文地址:https://www.cnblogs.com/feijiediyimei/p/14510603.html
Copyright © 2020-2023  润新知