mozilla
您的搜索结果

    typeof

    概述

    typeof操作符返回一个字符串,表示未经求值的操作数(unevaluated operand)的类型。

    语法

    typeof operand

    参数

    operand 是一个表达式,表示对象或原始值,其类型被返回。

    描述

    此表总结了 typeof 可能的返回值。更多有关类型和原始值的信息,可查看 JavaScript数据结构 页面。

    类型 结构
    Undefined "undefined"
    Null "object" (see below)
    布尔值 "boolean"
    数值 "number"
    字符串 "string"
    Symbol (ECMAScript 6 新增) "symbol"
    宿主对象(JS环境提供的,比如浏览器) Implementation-dependent
    函数对象 (implements [[Call]] in ECMA-262 terms) "function"
    任何其他对象 "object"

    例子

    常规用法

    // Numbers
    typeof 37 === 'number';
    typeof 3.14 === 'number';
    typeof Math.LN2 === 'number';
    typeof Infinity === 'number';
    typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写,意思是"不是一个数字"
    typeof Number(1) === 'number'; // 不要这样使用!
    
    // Strings
    typeof "" === 'string';
    typeof "bla" === 'string';
    typeof (typeof 1) === 'string'; // typeof返回的肯定是一个字符串
    typeof String("abc") === 'string'; // 不要这样使用!
    
    // Booleans
    typeof true === 'boolean';
    typeof false === 'boolean';
    typeof Boolean(true) === 'boolean'; // 不要这样使用!
    
    // Symbols
    typeof Symbol() === 'symbol';
    typeof Symbol('foo') === 'symbol';
    typeof Symbol.iterator === 'symbol';
    
    // Undefined
    typeof undefined === 'undefined';
    typeof blabla === 'undefined'; // 一个未定义的变量,或者一个定义了却未赋初值的变量
    
    // Objects
    typeof {a:1} === 'object';
    
    // 使用Array.isArray或者Object.prototype.toString.call方法可以从基本的对象中区分出数组类型
    typeof [1, 2, 4] === 'object';
    
    typeof new Date() === 'object';
    
    // 下面的容易令人迷惑,不要这样使用!
    typeof new Boolean(true) === 'object';
    typeof new Number(1) ==== 'object';
    typeof new String("abc") === 'object';
    
    // 函数
    typeof function(){} === 'function';
    typeof Math.sin === 'function';
    

    null

    // 从JavaScript一开始出现就是这样的 
    typeof null === 'object';
    
    

    在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是0。由于 null 代表的是空指针(大多数平台下值为0x00),因此,null的类型标签也成为了0,typeof null就错误的返回了"object".(reference)

    该现象有待于在ECMAScript 6中被修复 (该提议已被否决). 正确的返回值将成为 typeof null === 'null'.

    正则表达式

    对正则表达式字面量的类型判断在某些浏览器中不符合标准:

    typeof /s/ === 'function'; // Chrome 1-12 ... // 不符合 ECMAScript 5.1
    typeof /s/ === 'object'; // Firefox 5+ ...    // 符合 ECMAScript 5.1
    

    规范

    Specification Status Comment
    ECMAScript 1st Edition. Standard Initial definition. Implemented in JavaScript 1.1
    ECMAScript 5.1 (ECMA-262)
    The typeof Operator
    Standard  
    ECMAScript 6 (ECMA-262)
    The typeof Operator
    Draft  

    浏览器兼容性

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

    IE 宿主对象是对象而不是函数

    在 IE 6, 7 和 8 中,大多数的宿主对象是对象,而不是函数,例如:

    typeof alert === 'object'
    
     

    相关链接

    文档标签和贡献者

    此页面的贡献者有: ziyunfei, yufeng, AlexChao, ethertank, teoli
    最后编辑者: yufeng,
    隐藏侧边栏