zoukankan      html  css  js  c++  java
  • JavaScript类型

    一、ECMAScript语言中所有的值均有一个对应的语言类型。ECMAScript语言类型包括Undefined、Null、Boolean、String、Number和Object。

      我们这样来定义类型:对于语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使其区别于其它值。

      JS有七种内置类型:

    • 空值(null)
    • 未定义(undefined)
    • 布尔值(boolean)
    • 数字(number)
    • 字符串(string)
    • 对象(object)
    • 符号(symbol,ES6中新增)

      注意:除了对象外,其他统称为“基本类型”。

      我们可以用typeof运算符来查看值的类型,它返回的是类型的字符串值。例如:

        1. typeof undefined   ===  "undefined";
        2. typeof true             ===  "boolean";
        3. typeof 42                    ===        "number";
        4. typeof "42"                 ===         "string";
        5. typeof { life:42 }          ===         "object";
        6. typeof Symbol             ===         "symbol";     //ES6中新加入的类型

      但是 typeof null === "object";   这个是js的一个bug,由来已久(20多年了)。

      那么我们需要符合条件来检测null值的类型

    var a=null;
    (!a&&typeof a==="object");  //true

      函数是“可调用对象”,实际上function(函数)是object的一个“子类型”,它有一个内部属性[[Call]],该属性使其可以被调用。

      typeof function a(){ /**/ } ==="function";   //true

         函数不仅是对象,还可以拥有属性。例如:

      

    function a(b,c){
        /*...*/
    }
    //函数对象的length属性是其声明的参数的个数,那么:
    a.length;//2

      无独有偶,数组也是object的一个“子类型”,数组的元素按数字来进行索引(而非普通像对象那样通过字符串键值对),其length属性是元素的个数。

      typeof [1,2,3] ==="object";  //true

     二、值和类型

      JavaScript中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。也就是说语言引擎不要求变量总是持有与其初始值同类型的值。

      

    var a=42;
    typeof a;    //"number"
    
    a=true;
    typeof a;    //"boolean"
    
    typeof typeof 42    //"string"
    
    //typeof 42 首先返回字符串“number”,然后typeof “number” 返回 “string”

      undefinedundeclared完全是两回事。

    变量在未持有值的时候为undefined。此时typeof 返回“undefined”:

    首先看下undefined

    var a;
    typeof a;    //"undefined"
    
    var b=42;
    var c;
    
    //later
    
    b=c;
    
    typeof b;    //"undefined"
    typeof c;    //"undefined"

     undefined和undeclared的区别:

    var a;
    
    a;  //undefined
    
    b;  //ReferenceError: b is not defined   其实这里的意思是:b is not declared 可是sb浏览器不会说那么清楚,我们需要原谅它。
    
    //然而更让人抓狂的是 typeof 处理undeclared变量的方式。例如:
    
    var a;
    
    typeof a;  //"undefined"
    
    typeof b;  //"undefined"   而且这里没有报错,是因为typeof 有一个特殊的安全防范机制,这里typeof如果能返回undeclared而非undefined的话,多好啊,可惜sb浏览器不会!
  • 相关阅读:
    #RunJS# 最少代码的瀑布流实现
    浏览器“Web Freer”,直接上twitter、facebook等国外的网站,附带去掉广告的方法。
    fixed固定块背景,滚动的时候却换背景
    成为一个顶级设计师的八大秘诀
    Font Awesome设计原理分析
    IE6PNG透明解决办法(2)js
    有趣的反汇编
    我这个用notepad的小可怜虫..
    自修改代码(SMC)技术学习
    lua绑定C++对象学习
  • 原文地址:https://www.cnblogs.com/vakeynb/p/7538376.html
Copyright © 2011-2022 走看看