javascript:对象类型检查

我们知道,javascript是一种弱类型的语言,并且,javascript中的一切实质上都是对象。那么,在javascript中如何进行对象的类型检查将是一个非常重要的话题。

这里,我将介绍两种在js中经常使用的用于类型检测的方法。

第一种方法是使用"typeof"操作符,这种方法可能大家都知道。使用它来进行类型检测的结果是下列六个字符串中的其中一个:"number","boolean","object","number","function","string"。不错,使用这个操作符,绝大部分的对象类型我们都可以检测到,但是,这里有一个例外:那就是在使用数组的时候。javascript本身对于数组和对象的区别是混乱的,typeof运算符报告数组和对象的类型都是"object",因此,javascript在区别数组和对象的方式上并没有yield好的机制。

例如:

var arr=[1,2,3,4,5]
var obj={"name":"xiaoming","sex":"nan"};
alert(typeof arr)//返回"object"
alert(typeof obj)//返回"object"

那么,我们该如何判别这种特殊的情况呢?

这里,便是我要讲到的第二种常用的进行类型检查的方式:"constructor"属性。

在javascript中,任何对象都有一个constructor属性,它引用的是用来构造该对象的原始函数。

下面一段示例代码说明了这种方式的用法:

var num=11,str="abc",obj={num:11},arr=[1,2,3];
alert(num.constructor===Number);//true
alert(str.constructor===String);//true
alert(obj.constructor===Object);//true
alert(arr.constructor===Array);//true

可以看到,使用constructor时,数组返回的不再是object,而是具有鲜明意义的Array。

下表展示了使用上述两种方式对不同类型对象进行类型检查的结果。

变量                                   typeof变量                       变量.construtor



{an:"object"}                         object                               Object

["an","array"]                         object                                Array

function(){}                            function                             Function

"a string"                                string                                 String

55                                           number                              Number

true                                         boolean                             Boolean

new User()                              object                                User



这里需要注意的是,typeof运算符返回的结果是一个字符串;而constructor属性返回的结果是一个对象

因此,通过上面的只是,我们可以定义自己的is_array函数来进行数组的检查:

var is_array=function(){
  return value &&
      typeof value===‘object‘ &&
      value.constructor===Array;
}
时间: 2024-11-05 08:36:26

javascript:对象类型检查的相关文章

JavaScript对象类型详解

JavaScript对象类型详解 JavaScrtip有六种数据类型,一种复杂的数据类型(引用类型),即Object对象类型,还有五种简单的数据类型(原始类型):Number.String.Boolean.Undefined和Null.其中,最核心的类型就是对象类型了.同时要注意,简单类型都是不可变的,而对象类型是可变的. 什么是对象 一个对象是一组简单数据类型(有时是引用数据类型)的无序列表,被存储为一系列的名-值对(name-value pairs).这个列表中的每一项被称为 属性(如果是函

网站前端_JavaScript-基础入门.0009.JavaScript对象类型

对象简介: 说明: Object属于引用类型,引用类型是一种数据结构,用于将数据和功能组织在一起,如var newObj = new Object(),这行代码创建了Object引用类型的一个新实例,保存在newObject中,使用的构造函数是Object,它只为新对象定义了默认的属性和方法. 对象相关: 说明: Object实例虽然不具备多少功能但对于应用程序中的存储和传输数据而言,确实是非常理想的选择. /*  * 创建对象方式  */ // 支持构造参数 var newObj = new 

javascript函数参数、返回值类型检查

实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.define('PERSON', function(p){    return p && p.type === 'person' && p.name;}); 定义函数:var addStr = Str(function(a, b){  return a + b;}, Str, St

JavaScript中对象类型的转换小结

对象到字符串和对象到数字类型的转换涉及到两个重要的方法,最终的转换结果会受到这两个方法返回结果的影响,这两个方法就是toString和valueOf.所有的对象都会从Object对象中继承到这两个方法.toString方法 用于返回对象的字符串表示(但是其实也可以不返回字符串).对于默认从Object继承而来的toString方法并不会返回太多有意义的内容.而valueOf方法目的是返回一个可以表示对象的原始类型值,但是由于对象的复杂性,大多数情况下根本不可能用一个原始类型值来表示,所以默认的v

javascript 判断对象类型

typeof typeof是一个一元运算符,它返回的结果 始终是一个字符串,对不同的操作数,它返回不同的结果. 此表总结了typeof所有可能的返回值: 操作数类型 返回值 undefined "undefined" Null "object" Boolean "boolean" Number "number" String "string" 函数对象 "function" E4X XM

(转)JavaScript中判断对象类型的种种方法

我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type

javaScript对象-基本包装类型的详解

本人按书上的内容大致地把javaScript对象划分成“引用类型”.“基本包装类型”和“内置对象”三块内容. 我们这篇先了解下基本包装类型的详细用法吧! 一.我们先解下相关概念: 1.引用类型的值(对象)是一个引用类型的一个实例. 在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起.它也通常称为类. 尽管ECMASript中,从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为它们描述是一类对象所具

javascript不同类型对象比较规则

javascript不同类型对象比较规则 例子一: [0]==true; 首先会把true进行toNumber,结果为1,式子及转化为 [0]==1 然后[0]会被toString(),结果为"0",式子转化为"0"==1 接着"0"会被toNumber(),结果为0,式子转化为0==1 最后根据type(x)==type(y),式子转化为0===1 所以[0]==true会得到false 例子二: "potato"==tru

Javascript进阶(2)---对象类型

Javascript进阶(2)---对象类型 Javascript原始对象类型(6种): (数据类型)number.string.boolean.function.undefined (对象类型)object(null.{}.Array.Date.RegExp...) 关于NaN NaN是一个特殊的number类型,它与任何数值都不相等,也包括他自己 typeof(NaN)的值为number 隐式转换 1 var x = "66H34TYY" + 42 ; 2 var y = 42 +