zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JS・TextArea 字符串长度限制
    JavaScript面试题目集锦
    IE内存泄露分析
    JS动态添加样式和脚本
    取消锚(<a/>)点击后页面跳转的几种方法
    JS代码片段整理
    IE缓存问题的解决方法
    字符串与数字 转换
    如何安装和配置Cassandra
    字类和超类的转化问题
  • 原文地址:https://www.cnblogs.com/feijiediyimei/p/14510603.html
Copyright © 2011-2022 走看看