JavaScript类型判断instanceof与typeof对比
2016-07-11 14:00
621 查看
经常有人会在JavaScript里写如下的方法:
第二:
String 类型的声明。
使用 var str = new String("String");声明定义的是一个String类型的对象。str指向该对象的一个引用
使用 var str1 = "String";声明定义将str指向字符串“String”,
str指向一个实例,str1指向一个字符串。
以上声明定义的规则,同java类似。
访问str时,JavaScript引擎会“自动拆装包”得到str的对象实例所表示的值“String”。所谓“自动拆装包”即运行期时,基础数据类型 转换成基础类型构造的对象实例以及将基础类型构造的对象实例转换成基础数据类型。如“new Number”、new Boolean("true")、new String等。
因此s2只有自己的基本类型而没有所谓的实例构造类型
即,我们定义了var s1 = 123, 它的类型并不是Number,而是var。
只有我们把123实例化为Number的时候,它的类型在instanceof里才是Number。
其他的自定义类一样。
另外一个方法typeof
JavaScript中instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。
typeof用以获取一个变量的类型,typeof一般只能返回如下六种结果:
number, boolean, string, function, object, undefined。
我们可以使用typeof来获取一个变量是否存在,如
也会返回true;
这是因为Array是object的子类。
再如:
得到'Y'
但
会得到 object
问题在哪里呢? 首先我们要理解,JS里,var本身是一个泛型,它并不是Number,也不是String,更不是其他的类。 其次要从instanceof方法来理解: 第一: instanceof 表示对象是否是特定类的一个实例。 注意特定类的实例,也就是说instanceof反馈的是对象的构造的信息。 语法为:result = object instanceof class 例如: [code]function Test() {} var test = new Test(); alert(test instanceof Test);
第二:
String 类型的声明。
使用 var str = new String("String");声明定义的是一个String类型的对象。str指向该对象的一个引用
使用 var str1 = "String";声明定义将str指向字符串“String”,
str指向一个实例,str1指向一个字符串。
以上声明定义的规则,同java类似。
访问str时,JavaScript引擎会“自动拆装包”得到str的对象实例所表示的值“String”。所谓“自动拆装包”即运行期时,基础数据类型 转换成基础类型构造的对象实例以及将基础类型构造的对象实例转换成基础数据类型。如“new Number”、new Boolean("true")、new String等。
因此s2只有自己的基本类型而没有所谓的实例构造类型
即,我们定义了var s1 = 123, 它的类型并不是Number,而是var。
只有我们把123实例化为Number的时候,它的类型在instanceof里才是Number。
其他的自定义类一样。
另外一个方法typeof
JavaScript中instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。
typeof用以获取一个变量的类型,typeof一般只能返回如下六种结果:
number, boolean, string, function, object, undefined。
我们可以使用typeof来获取一个变量是否存在,如
而不要去使用if(a),因为如果a不存在(未声明)则会出错, 对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。 如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。 instanceof用于判断一个变量是否某个对象的实例,如 var a=new Array()]alert(a instanceof Object)
也会返回true;
这是因为Array是object的子类。
再如:
var a = new Array(); if (a instanceof Object) { alert('Y'); } else { alert('N'); }
得到'Y'
但
alert(typeof(window)
会得到 object
相关文章推荐
- JavaScript学习笔记十八:标准对象-Date
- JSP学习笔记(一)
- js 判断某个对象是不是dom对象
- JavaScript中,window.opener是什么?window.parent和window.opener有啥区别?
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
- 160630、五句话搞定JavaScript作用域
- JavaScript正则表达式详解(一)正则表达式入门
- JavaScript流程控制
- javascript学习之流程控制
- js 实用技巧
- JSON拼接字符串
- 动画库之 - tween.js
- Js运动动画系列9--多物体同时运动-封装运动框架
- js caller 和callee的区别
- Js运动动画系列8--链式动画
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号
- javaScript的语法
- Js运动动画系列5--多物体运动-透明度
- 前后轮翻的JS图片幻灯切换
- C# winsocket连接 Jsonp