美文网首页
红宝书笔记-数据类型

红宝书笔记-数据类型

作者: 拾起落叶好过冬 | 来源:发表于2017-12-10 21:35 被阅读9次

    数据类型

    使用typeof判断类型注意点

    typeof可以用来判断数据类型,但是,对于复杂类型无能为力,比如

    typeof null //object

    typeof /^abc$/ //object

    typeof [1,2,3] //object

    typeof new Date() //object

    typeof undefined //undefined

    typeof function(){return 1;} //function

    可以看到,null、数组、正则、日期几种类型都返回object,若完美判断类型最好使用Object.prototype.toString.call 的方法。

    undefined 和 null

    undefined表示定义的变量未赋予任何值,自动会得到undefined。
    但注意区别

    var message;
    console.log(message);   //undefined;
    console.log(info);  //报错 info is not defined
    

    以上,message变量声明了,但没有手动赋值,因此自动得到了undefined,但是info变量连声明都没有,所以是会报错的。

    为什么undefined == null为真?

    原理是因为在javascript中,undefined值派生自null,因此ECMA-262规定它们相等

    对象转布尔值的规则

    javascript中任何一种类型都能转换为布尔(boolean)值,转换的规则如下:

    数据类型 转换为true的值 转换为false的值
    Boolean true false
    String 任何非空字符串 ""空字符串
    Number 任何非零数字(包括无穷大) 0 和 NaN
    Object 任何对象 null
    Undefined 不适用 undefined

    举几个栗子:

    Boolean({});        //true
    Boolean(null);      //false
    Boolean(undefined); //false
    Boolean(100);       //true
    Boolean(Infinity);  //true
    Boolean(NaN);       //false
    

    Number数值类型

    浮点数的计算

    在javascript中,小数点右侧有值才会当做浮点数处理,比如1.2,如果小数点右则无值或是0,都当做整数来处理如:1.0。

    javascript中由于使用IEEE754来处理浮点数,因此千万不要使用浮点数计算后的结果进行比较!举个栗子:

    0.1+0.2 //0.30000000000000004
    

    并不是你想象的0.3。

    NaN

    NaN在javascript中是一个特殊的数值,表示“不是一个数字”(Not a Number),javascript中引入NaN是为了处理数值操作返回未知的情况,这样就不会抛出错误终止程序运行了(比如java就会抛错)。

    0/0 //0除0,的结果是NaN
    
    Number('hello') //转换数值类型失败时也是NaN
    

    NaN与任何值进行计算还是NaN

    NaN + 1 //NaN
    

    NaN与任何值比较都不相等,自己也是

    NaN == false    //false
    NaN == 0        //false
    NaN == 1        //false
    NaN == null     //false
    NaN == NaN      //false
    

    若想判断是不是NaN,应使用isNaN()函数

    数值转换

    转换为数值类型有几个规则

    1. 如果是布尔值,true转为1,false转为0
    2. 如果是数值,直接返回
    3. 如果是null,转为0
    4. 如果是undefined,转为NaN
    5. 如果是字符串,比较复杂,有以下规则:
      • 如果字符串中是数字,则直接转换为对应的数值
      • 如果字符串是空的,则转换为0
      • 如果字符串中包含上述格式之外的字符,则转换为NaN
    6. 如果是对象,也比较复杂,有以下规则:
      • 调用目标的valueOf方法,然后按以上步骤转换,如果结果是NaN,再调用toString方法,按以上步骤返回转换的字符串值

    String字符串

    转换为String类型

    转换为String类型有以下规则:

    1. 如果目标对象有toString方法,调用并返回结果
      • 对象的toString返回[object Object]
      • 函数的toString返回函定义的字符串形式
      • 空数组返回""
      • 有内容的数组toString返回和join方法一致
    2. 如果值是null,返回"null"
    3. 如果值是undefined,返回"undefined"

    Object

    javascript中Object用来定义对象,Object是所有对象的基础。

    var obj1=new Object();
    var obj2={};
    

    以上两种写法都可以正确定义对象,推荐第二种写法。

    每个Object对象实例都有以下方法:

    • constructor: 保存着用于创建当前对象的函数(目前constructor就是Object())
    • hasOwnProperty: 检查属性是否是当前实例属性(若是在原型链上返回false)
    • isPrototypeOf: 检查传入的对象是否是传入对象的原型
    • propertyIsEnumerable: 传入的属性能否被for...in 枚举到
    • toLocalString: 返回本地字符串的表现形式
    • toString: 返回字符串表现形式
    • valueOf: 返回对象的字符串、数值或是布尔值的表现形式

    相关文章

      网友评论

          本文标题:红宝书笔记-数据类型

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