美文网首页
JS隐式转换

JS隐式转换

作者: 元气满满321 | 来源:发表于2017-08-22 11:12 被阅读58次

基础类型

  1. 大部分类型错误都被类型转换隐藏了
3 + true //4

但少数会出现错误

null.x//"TypeError: Cannot read property 'x' of null

2.运算符中的"+"运算是从左到右

1+2+"3"//"33"
1+"2"+3//"123"

当字符串与数字相加时,数字会转换为字符串
3.NaN
只有NaN与自己也不相等,利用这一特性,我们可以用一个函数来检测是不是NaN

function isRealNaN(data){
   return data!==data;
}
isRealNaN(NaN);//true

对象的隐式转换

对象都有自己的toString(),valueOf方法,但优先调用valueOf()
对象转换成字符串是调用了他的toSting函数的,你可以手动的调用它来检测一下:

Math.toString(); // "[object Math]"
JSON.toString(); // "[object JSON]"

类似的,对象也是可以转换成数字的,他是通过valueOf函数的,当然,你也是可以自定义这个valueOf函数的,如下:

"J" + { toString: function() { return "S"; } }; // "JS"
2 * { valueOf: function() { return 3; } }; // 6

如果,一个对象同时存在valueOf方法和toString方法,那么,valueOf方法总是会被优先调用的,如下:

var obj = {
    toString: function() {
        return "[object MyObject]";
    },
    valueOf: function() {
        return 17;
    }
};
"object: " + obj; // "object: 17"

真值运算

只有false,0,-0,"",NaN,null,undefined这些转换为false
所以,直接用真值转换来判断一个函数的参数是否传进来了,这是不太安全的。如下:

function point(x, y) {
if (!x) {
    x = 320;
}
if (!y) {
    y = 240;
}
    return { x: x, y: y };
}

这个函数会忽略任何的真值为假的参数的,包括0,-0;

point(0, 0); // { x: 320, y: 240 }

point(0, 0); // { x: 320, y: 240 }

检测undefined的更加准确的方法是用typeof操作:


function point(x, y) {
if (typeof x === "undefined") {
    x = 320;
}
if (typeof y === "undefined") {
    y = 240;
}
    return { x: x, y: y };
}

这种写法,可以区分开0和undefined的:

point(); // { x: 320, y: 240 }
point(0, 0); // { x: 0, y: 0 }

另外一种方法是利用参数跟undefined作比较,如下:

if (x == undefined) { ... }

每天都努力一点点
谢谢你看完


相关文章

  • js中的类型转换

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

  • 类型转换

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

  • 隐式转换的规则

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

  • JS的基本小结

    JS基本输出方式 JS数据类型 变量 常量 变量常量小练习 声明提前 隐式转换 显示转换/强制转换

  • JS隐式转换

    基础类型 大部分类型错误都被类型转换隐藏了 但少数会出现错误 2.运算符中的"+"运算是从左到右 当字符串与数字相...

  • JS 隐式转换

    隐式转换 数据类型基本数据类型: undefined string boolean null number sym...

  • js隐式转换

    一、 运算中存在的隐式类型转换 1, “+”运算符 var a = 11, b ='22';var c = a +...

  • js隐式转换

    当我们使用if进行判断时,()内的值会被会被转换为boolean类型 undefined:false null:f...

  • JS 隐式转换

    今天在复习隐式转换的时候发现了一些盲点,首先简要回顾一下隐式转换规则。 + 加号,既可以是算术运算符,也可以是字符...

  • js隐式转换

    js隐式转换 boolean == number 当 布尔类型与数字类型进行 ==判断时;是将布尔转为数字,然后在...

网友评论

      本文标题: JS隐式转换

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