• JavaScript学习笔记(十四)——对象


    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意!

    如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/学习。


    标准对象

    在JavaScript的世界里,万物皆对象。

    但是对象与对象之间也有区别。为了区分对象的类型,我们可以用 typeof 操作符来获取对象的类型,它总是返回一个对象的类型:

    typeof 123; // 'number'
    typeof NaN; // 'number'
    typeof 'str'; // 'string'
    typeof true; // 'boolean'
    typeof undefined; // 'undefined'
    typeof Math.abs; // 'function'
    typeof null; // 'object'
    typeof []; // 'object'
    typeof {}; // 'object'

     从上面的例子我们可以看出, number , string , boolean , undefined , function 不同于其他的类型。 null 的类型是 object , Array 的类型也是 object ,所以,通过 typeof 操作符,我们无法区分 null ,Array 和通常意义上的 object —— { } 

    包装对象

    除了以上这些标准类型外,JavaScript还提供了包装对象,就好像Java里面 int 与 Integer 的关系

    在JavaScript中, number , boolean , string 都有它们对应的包装对象。包装对象用 new 来创建。

    var n = new Number(123); // 123,生成了新的包装类型
    var b = new Boolean(true); // true,生成了新的包装类型
    var s = new String('str'); // 'str',生成了新的包装类型

    虽然包装对象看上去和原来的值一模一样,但是它们的类型已经变成了 object 类型,所有,用 == 来比较包装对象和原始值,会返回 false 

    typeof new Number(123); // 'object'
    new Number(123) === 123; // false
    
    typeof new Boolean(true); // 'object'
    new Boolean(true) === true; // false
    
    typeof new String('str'); // 'object'
    new String('str') === 'str'; // false

    所以在非必要情况下,不要随意使用包装对象,尤其是针对string类型

    注意:如果我们在使用 Number , Boolean 和 String 时,没有用new关键字来创建对象, Number() , Boolean() , String() 会被当做普通对象,把传入的任何类型的数据转换为 number , boolean , string 类型(不是其包装类型)

    var n = Number('123'); // 传入字符串“123”,相当于parseInt()或parseFloat()
    typeof n; // 'number' 123
    
    var b = Boolean('true'); // 传入字符串“true”,结果为true
    typeof b; // 'boolean' 
    
    var b2 = Boolean('false'); //传入字符串'false',结果为true!因为它是非空字符串!
    var b3 = Boolean(''); // 空字符串,结果为false
    
    var s = String(123.45); // 传入数字123.45,结果为string字符串‘123.45’
    typeof s; //  'string'

    总结

    在JavaScript中,使用标准对象和包装对象时,需要遵循一下几点:

    1. 不要使用new Number() ,new Boolean() ,new String() 来创建包装对象;
    2. 使用parseInt() 和parseFloat() 可以将任意类型转换为number 类型;
    3. 使用String() 可以将任意类型转换成string 类型,或者直接调用某个对象的toString() 方法;(null,undefined没有此方法
    4. 一般不用把任意类型转换为 boolean 再判断,直接写成 if (myVar) {...} 即可;
    5. 使用typeof 操作符可以判断出number ,boolean ,string ,function ,undefined ;
    6. 使用Array.isArray(arr) 来判断是不是Array ;
    7. 使用myVar === null 来判断是不是null ;
    8. 使用typeof window.myVar === 'undefined' 来判断某个全局变量是否存在;
    9. 使用typeof myVar === 'undefined' 来判断某个函数内部某个变量是否存在;

      注意:

    • 以上5-9点注意事项,刚好可以判断所有的标准数据类型。
    • 以上第3点注意事项中,并不是所有的对象都有 toString() 方法, null 和 undefined 没有此方法。
    • number 对象调用 toString() 方法时,会报错 SyntaxError :
    123.toString(); // SyntaxError
    
    //需要经过如下处理:
    123..toString(); // '123', 注意是两个点!
    (123).toString(); // '123'
  • 相关阅读:
    Delphi Class of 类引用
    Class-reference types 类引用类型--快要失传的技术
    最简单的TabHost
    修改一些IntelliJ IDEA 11的设置,使Eclipse的使用者更容易上手(转)
    uva 10494
    uva748
    uva 465
    高精度
    uva 694
    uva414
  • 原文地址:https://www.cnblogs.com/whucs2012/p/7929404.html
Copyright © 2020-2023  润新知