ECMAScript中有6种简单数据类型:Undefined,Null,Boolea,Number,String和Object,这些都是一些基本知识,有意思在后面
用javascript里的typeof检测一下这6个数据类型你会有新发现
“undefined” ---------- 如果值未定义 Undefined
“boolean” ---------- 如果这个值是布尔值 Boolean
“string” ---------- 如果这个值是字符串 String
“number” ---------- 如果这个值是数值类型 Number
“object” ---------- 如果这个值是对象或null Object
“function” ---------- 如果这个值是函数 Function
但有的时候typeof是不靠谱的,
例如我们这样声明一个变量:
var str=new String(‘aaa‘); alert(typeof str); var iS=new Number(‘123‘); alert(typeof iS);
返回的都是object,没有返回string和number.typeof在这里失败了,现在得请出另一位选手 instanceof , instanceof的意思是XXX是XXX的实例.
上代码:
1
2
3
4
5
6
7
8
|
var
str= new
String( ‘aaa‘ );
alert(str instanceof
String);
var
iS= new
Number( ‘123‘ );
alert(iS instanceof
Number);
|
这样返回的都是true;在这样的声明方式下我们就能判断JS的基本数据类型了;
但是instanceof判断var str=‘abc‘这样的声明返回的是false;所以兼容的写法是 (typeof str== String) || (str instanceof String);
这样只要一个对了就可以了;
例外还有2种判断JS数据类型的方法
一个是利用面向对象中的constructor
1
2
3
4
5
|
var
str= ‘123‘ ;
var
str1= new
String( ‘abc‘ );
alert(str.constructor== String);<br><br>alert(str1.constructor== String); |
返回的都是true;这样就不用写上面那么麻烦了.
第二种是利用JS基本对象属性里的toString方法,这个方法默认返回数据类型的class
1
2
3
4
5
6
7
|
var
str= ‘123‘ ;
var
str1= new
String( ‘abc‘ );
alert(Object.prototype.toString.call(str)== ‘[object String]‘ );
alert(Object.prototype.toString.call(str1)== ‘[object String]‘ );
|
返回的都是true.就是代码写的有点多,不过可以清楚的判断数据的基本类型了.
不像typeof和instanceof那样某一方面不靠谱.