资讯专栏INFORMATION COLUMN

「JavaScript」操作数隐式类型转换

李昌杰 / 3180人阅读

摘要:无法将操作数转换为数字的情况下总是返回。字符串其他将其他转换为字符串,并进行拼接操作。因为操作数中没有字符串,所以参考一的转换规则。重要提示请不要忘记推荐和收藏搜索操作数隐式类型转换

JavaScript是一个对类型非常容忍的语言,在我们编写代码的过程中,会看到许多代码直接对不同类型的操作数进行操作。有的时候这会给我们的代码的编写带来很大的方便,而有些时候这些不加检查的类型比较也会给我们的代码带来一些隐患。在调试的时候,我们如果对JavaScript自动执行的类型转换有比较清楚的了解的话,很不容易发现问题的所在点。

PS: 对象→基本类型的转换规则请参考《JavaScript高级编程指南》

一、减号、乘号、除号、取模...

减号、乘号、除号、取模等操作符是比较单纯的操作符。
这些操作符会尝试将他们的操作数转换为数字(使用Number()),如果操作数没法转换为数字的话,他们的结果就是NaN

NaN与任何数进行这些操作,结果都是NaN

    // Demo1.html
    var obj = {
        valueOf: function() {
            return 18;
        }
    };
    var obj2 = {
        valueOf: function() {
            return 19;
        }
    };

    console.log(
            1 - "2", // -1
            "32" - "22", // 10
            obj % 4, // 2
            obj * obj2, // 342
            "99b" * 10 // NaN
    );
二、大于、小于、大于等于、小于等于

同(一),但是对于两个操作数均是字符串的时候&无法转换时的返回值会有不同。
当两个操作数均是字符串的时候,它会执行大家熟悉的字符串比较,即从左到右依次比较每一个字符的ASCII码,若出现符合操作符的情况,则返回true,否则返回false
无法将操作数转换为数字的情况下总是返回false

Boolean(NaN) == false

    // Demo2.html
    var obj = {
        valueOf: function() {
            return 18;
        }
    };

    console.log(
            1 <= "2", // true
            "1" <= "a", // true
            obj >= "17" // true
    );
三、==、!=

这两个运算符在大部分上面都是与(一)相同的,不同的是:

字符串 op 字符串:不会进行类型转换,直接比较。

对象 op 对象:引用都指向同一个对象才为true

    // Demo3.html
    var obj = {
        valueOf: function() {
            return 18;
        }
    };
    var obj2 = {
        valueOf: function() {
            return 19;
        }
    };

    console.log(
            obj == obj2, // false
            "XD" == "XD", // true
            obj == 18, // true
            obj2 == "19" // true
    );

温馨提示:null == undefined // true

四、加号(+)

当没有特别指定的时候参考(一),比如对象+对象等,但有如下几种例外情况:

字符串 + 字符串:进行字符串拼接操作。

字符串 + 其他:将其他转换为字符串,并进行拼接操作。

    // Demo4.html
        var obj = {
        toString: function() {
            return "18s";
        },
        valueOf: undefined
    };
    var obj2 = {
        toString: function() {
            return "19b";
        },
        valueOf: function() {
            return 19;
        }
    };

    console.log(
            obj + obj2, // "18s19"
            obj2 + obj2 // 38
    );

注意上面obj + obj2的结果不是"18s19b"。因为操作数中没有字符串,所以参考(一)的转换规则。

DEMO

[重要提示]请不要忘记推荐收藏 (╯‵□′)╯︵ ┴─┴

git clone https://github.com/JasonKid/fezone.git

搜索 操作数隐式类型转换

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

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

相关文章

  • JavaScript 强制类型转换

    摘要:强制类型转换作为程序员,你一定获取过当前系统的时间戳。比如对于变量而言,此次强制类型转换是隐式的。然而则是非常典型的显式强制类型转换。隐式强制类型转换大部分被诟病的强制类型转换都是隐式强制类型转换。 JavaScript 强制类型转换 作为 JavaScript 程序员,你一定获取过当前系统的时间戳。在 ES5 引入 Date.now() 静态方法之前,下面这段代码你一定不会陌生: v...

    OnlyLing 评论0 收藏0
  • 掌握 Javascript 类型转换隐式转换救救孩子

    摘要:看下面的代码和会对操作数执行条件判断,如果操作数不是布尔值,会先执行类型转换后再执行条件判断。大家记住这个规则布尔值如果与其他类型进行抽象比较,会先用将布尔值转换为数字再比较。 在上一篇中我们聊过了 JS 类型转换的规则和我发现的一些常见书籍中关于类型转换的一些小错误,当碰到显示类型转换的时候大家可以按照这些规则去拆解出答案。但 JS 中存在一些很隐晦的隐式类型转换,这一篇就来谈下我对...

    weapon 评论0 收藏0
  • Front-end developmenter必看,超实用的javaScript隐式类型转换规则记忆

    摘要:下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容类型转换需要使用到的函数对于布尔值用到的是对于数值,用到的是当然还有但是对于隐式类型转换的时候,调用的是前者。 javaScript类型转换规则 javaScript的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。 但其实...

    fuchenxuan 评论0 收藏0
  • 聊一聊 JS 中的『隐式类型转换

    摘要:具体的行为取决于参数的类型。说到,就不得不提一下方法,方法自带隐式类型转换,该方法在测试其参数之前,会先调用方法将其转换为数字。全等运算符会先进行数据类型判断,并且不会发生隐式类型转换。 类型转换还不行?还非得隐式?这是什么高级玩意? 废话不多说,我们先上一盘?,额,不对,先看一个例子吧。 3 + true 实际上在大多数编程语言中,都会认为上面这个表达式是错误的。因为布尔表达式与算术...

    Jenny_Tong 评论0 收藏0
  • JavaScript隐式类型转换

    摘要:所谓装箱转换,正是把基本类型转换为对应的对象,他是类型转换中一种相当重要的种类。拆箱转换在标准中,规定了函数,它是对象类型到基本类型的转换即,拆箱转换。拆箱转换会尝试调用和来获得拆箱后的基本类型。 JavaScript隐式类型转换 基本数据类型 ECMAScript 一共定义了七种 build-in types,其中六种为 Primitive Value,Null, Undefined...

    bingo 评论0 收藏0
  • JavaScript 运算符规则与隐式类型转换详解

    摘要:我们再来回顾下文首提出的这个比较运算,首先为对象,则调用函数将其转化为字符串对于右侧的,首先会进行显式类型转换,将其转化为。 JavaScript 运算符规则与隐式类型转换详解 从属于笔者的现代 JavaScript 开发:语法基础与工程实践系列文章,主要探讨 JavaScript 中令人迷惑的加减乘除与比较等常见运算中的规则与隐式类型转换;本文中涉及的参考资料全部声明在了JavaSc...

    Kyxy 评论0 收藏0

发表评论

0条评论

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