javascript 类型判断

前言:
新来的同事问我该怎么判断未定义的变量是否存在,第一念头是a != undefined,但是这个显然是不对的,应该使用typeof检测
typeof是一个运算符,运算数可以是任何类型,返回值是一个字符串。
  • undefined - 如果变量是 Undefined 类型的
  • boolean   - 如果变量是 Boolean 类型的
  • number    - 如果变量是 Number 类型的
  • string    - 如果变量是 String 类型的
  • object    - 如果变量是一种引用类型或 Null 类型的
注:这里又涉及javascript5大数据类型,查找资料时,在ECMAScript和javascript的关系上又杠上了......
看了javascript的实现后,我的理解是ECMAScript就是一个标准,制定了各种规范,定义了脚本语言的所有属性、方法和对象。而javascript是由ECMAScript、DOM和BOM组成。
DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。
BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript 扩展都被看做 BOM 的一部分。这些扩展包括:
  • 弹出新的浏览器窗口
  • 移动、关闭浏览器窗口以及调整窗口大小
  • 提供 Web 浏览器详细信息的定位对象
  • 提供用户屏幕分辨率详细信息的屏幕对象
  • 对 cookie 的支持
IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象
--------------------------------------------------------------------------------------------华丽丽的分割线------------------------------------------------------------------------------------------------
重新切入到typeof
 
1.检查变量是否存在,是否有值
typeof undeclaredVariable === 'undefined'    // true
var a;
typeof a    // 'undefined'
对于已定义的变量,检测时候它的值也可以使用下面的方法
var a;
a === undefined    // true
未定义的变量则使用typeof检测,紫云飞的[译]JavaScript:typeof的用途里面说到另一种检测没有声明的全局变量是否存的方法使用if ( window.varabilename ),高招!
 
2.判断一个值不等于undefined且不等于null
typeof null 返回的是 object,所以此时typeof 判断无效
解决方案(ERROR):
紫云飞译的文章里面说定义一个isDefined函数,但是经过测试在没有声明全局变量的情况下依然会报错。
function isDefined(x) {
    return x !== null && x !== undefined;      
}
isDefined(a)    // ERROR
解决方案(SUCCESS):
先用typeof判断是否存在,再判断是否等于null
typeof a !== undefined && a !== null    //    false
 or
window.a !== undefined && a !== null    // false
 
 javascript中的数据类型
ECMAscript中有5中基本数据类型,Undefined、Null、String、Number、Boolean,一种复杂数据类型Object
Undefined
Undefined类型只有一个值,即undefined。使用var变量声明但是未赋值是,变量值即为undefined。
Null
Null类型也只有一个值null。null值表示一个空对象指针,使用typeof null时返回值是‘object’
var obj = null;
typeof obj         //    'object'
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
undefined == null        //  ture
undefined === null     //  false
Boolean
Boolean类型有两个字面量值,true和false。要将一个值转换为对应的boolea值,可使用类型转换函数Boolean()。
数据类型
转换为true值
转换为false值
Boolean
true
false
String
任何非空字符串
“”(空字符串)
Number
任何非0数字值(包括无穷大)
0和NAN
Object
任何对象
null
Undefined
 
undefined
Number
这种类型用来表示整数和浮点数,还有一种数据类型NAN(not a number)。这个数值用于本来要返回一个数值的操作数未返回数值的情况(这样就不会抛错了)。
NAN有两个非同寻常的特点。首页,涉及NAN的任何操作都会返回NAN。NAN与任何值都不相等包括它本身。
NAN == NAN    // false
isNaN()函数,这个函数接受任何一个参数,该参数可以是任何类型,函数会帮助我们确定这个参数是否“不是数值”。isNaN()在接受一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串“10”或Boolean值,而任何不能被转化为数值的值都会导致这个函数返回true。
isNaN(NaN)    // true
isNaN(10)      // false
isNaN('10')    // false
isNaN('阿树')  // true
isNaN(true)   // false
String
数值、布尔值、对象和字符串都有toString()方法,但null和undefined没有这个方法。
在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String(),这个函数能将任何类型的值转为字符串
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;

console.log(String(value1));    // 10
console.log(String(value2));    // true
console.log(String(value3));    // null
console.log(String(value4));    // undefined
Object
  
 
 
To be continued...
 
参考链接:
[译]JavaScript:typeof的用途
javascript的实现
javascript之数据类型
posted @ 2015-06-26 11:18  Onetree  阅读(126)  评论(0编辑  收藏  举报