JS辨别数据类型

首先要了解JS判断语句中的假值

  值     类型
  0      Number
  NaN    Number
 ‘’(空字符串) String
  false    Boolean
  null     Object
  undefined  Undefined

怎么辨别数组,null和对象

typeof

  typeof不能判断出数组和null,而且对于通过new操作符生成的对象,只会返回’object’

1
2
3
alert(typeof null); //'object'
alert(typeof []); //'object'
alert(typeof {}); //'object'

  但Object.prototype.toString对任何变量会永远返回这样一个字符串”[object class]”,而这个class就是JavaScript内嵌对象的构造函数的名字。至于用户自定义的变量,则class等于object。

1
2
3
alert(Object.prototype.toString.call(null));    //'[object Null]'
alert(Object.prototype.toString.call([])); //'[object Array]'
alert(Object.prototype.toString.call({})); //'[object Object]'

①因此通过Object.prototype.toString.call(obj)可以准确的获取变量数据类型。

  通过Object.prototype.toString可以获得的数据类型包括:Date, Object, String, Number, Boolean, Regexp, Function, undefined, null等。

②因为null是假值,所以辨别null与object或数组的关系可以用如下

1
2
3
4
//var value=null;
if(value && typeof value==='object'){
alert('这是个对象或数组');
}

判断NaN值

  NaN值一般在试图把非数字形式的字符串转换为数字时产生。

  上面的typeof和Object.prototype.toString.call(obj);都不能判断NaN值,而且NaN也不等同于它自己。

1
2
3
alert(typeof NaN);	//'number'
alert(Object.prototype.toString.call(NaN)); //'[object Number]'
alert(NaN===NaN); //false

好在JS提供了isNaN函数,可以辨别数字与NaN

1
2
alert(isNaN('0'));	//false
alert(isNaN('oops')); //true

其它问题记录

  undefined和null与任何有意义的值比较返回的都是false,但是null与undefined之间互相比较返回的是true。

  一般typeof正则表达式都会返回’object’,但在Safari3.x版本中,返回的是’function’

1
2
alert(undefined==null);    //true
alert(typeof /a/); //'object'

  严格相等运算符(===)有两个需要注意的例子:除了NaN===NaN返回false以外,+0===-0却返回true。所以ES6提出了Object.is()方法来比较两个值是否严格相等。

文章目录
  1. 1. 首先要了解JS判断语句中的假值
  2. 2. 怎么辨别数组,null和对象
    1. 2.1. typeof
      1. 2.1.1. ①因此通过Object.prototype.toString.call(obj)可以准确的获取变量数据类型。
      2. 2.1.2. ②因为null是假值,所以辨别null与object或数组的关系可以用如下
  3. 3. 判断NaN值
    1. 3.0.1. 好在JS提供了isNaN函数,可以辨别数字与NaN
  • 4. 其它问题记录
  • ,