js判断复合数据类型的两种方式(typeof不奏效了)

js判断复合数据类型的两种方式(typeof不奏效了)

博客分类:

JavaScript

作者:zccst

typeof认为所有的复合数据类型都是"object",没法进一步细分,所以还得用其他方法

先上结论:

1,(arr && typeof(arr) === "object" && arr.constructor === Array)

2,Object.prototype.toString.call(arr);

Js代码  

  1. Object.prototype.toString.call([]);
  2. //"[object Array]"
  3. Object.prototype.toString.call({});
  4. //"[object Object]"

例子:

Js代码  

  1. var arr = [];
  2. arr[‘name‘] = "helios";
  3. arr[‘version‘] = ‘trunk‘;
  4. console.log(arr, typeof arr);
  5. console.dir(arr);//信息比较全面
  6. $.each(arr, function(key, item){//没有进入循环,是因为length=0
  7. console.log(key, item, item[key]);
  8. });
  9. console.log( Object.prototype.toString.call(arr) );
  10. console.log( arr.constructor , arr.constructor === Array);
  11. console.log(arr && typeof(arr) === "object" && arr.constructor === Array);

打印:

[name: "helios", version: "trunk"] "object"

Array[0]

length: 0

name: "helios"

version: "trunk"

__proto__: Array[0]

[object Array]

function Array() { [native code] } true

true

批注:

1,arr还是数组。只不过length=0,同时绑定了两个静态变量。jQuery不循环这类数据。

2,typeof只是用来判断基本数据类型的。复合数据类型typeof判断出都是"object"

3,instanceof也不奏效,因为他们是继承关系。

Js代码  

    1. var arr = [];
    2. arr[‘name‘] = "helios";
    3. arr[‘version‘] = ‘trunk‘;
    4. console.log( arr instanceof Array );  //true
    5. console.log( arr instanceof Object ); //true
时间: 2025-01-01 12:55:11

js判断复合数据类型的两种方式(typeof不奏效了)的相关文章

JS中检测数据类型的几种方式及优缺点【转】

1.typeof 用来检测数据类型的运算符 typeof value 返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number"."string"."boolean"."undefined"."object"."function" 局限性:1)typeof null ->"object"2)检测的不管是数组还是正则都返回的是"obje

JS中检测数据类型的几种方式及优缺点

1.typeof 用来检测数据类型的运算符 typeof value 返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number"."string"."boolean"."undefined"."object"."function" 局限性:1)typeof null ->"object"2)检测的不管是数组还是正则都返回的是"obje

js中创建数组的两种方式

第一种方式:var  array1=new Array(); 第二种方式:var array2=[元素1,元素2,元素3...]; 解析:当只传入一个元素并且是unmber时,这个元素代表的是数组长度. 说明:在JS中有空间在未使用之前,这个空间的类型是不确定的:导致什么类型的数据都可以给其中存放.

js获取url参数值的两种方式

js获取url参数值的方法有很多,下面也为大家介绍两种,喜欢的朋友可以测试下,希望对大家有所帮助 方法一:正则分析法 代码如下: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if

js中检测数据类型的几种方式

1.typeof 一元运算符,用来检测数据类型.只可以检测number,string,boolean,object,function,undefined. 对于基本数据类型是没有问题的,但是遇到引用数据类型是不起作用的(无法细分对象) let str = '{}'; let fn = function(){}; let obj = {}; let ary = []; let rg = /\d/; console.log(typeof str);//string console.log(typeo

js对象取值的两种方式

var obj = {abc:"ss",nn:90}; var v1 = obj.abc;//使用点的方式 var v2 = obj["abc"];//使用中括号的方式 在实际项目中一般使用点,会方便许多,但是如果key是变量的话就不能使用点了,js会理解变量为对象的key值,造成混淆 1 var v3 = obj[key];//key是一个变量

js获取url参数值的两种方式详解

有个url如下: http://passport.csdn.net/account/login?from=http%3a%2f%2fwrite.blog.csdn.net%2fpostedit 我们该如何获取from这个参数的值呢?在网上搜了下方法很简单,如下,第一种是通过正则,第二种通过切串放进数组的方式: 方法一: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^

php数组转换成js可用的数组的两种方式

1.如果你理解JSON数据格式的话,这个问题就异常简单: <?php $a =array('1','2','3'); ?> <script language="javascript"> var obj =eval('<?php echo json_encode($a);?>'); alert(obj[0]); alert(obj[1]); alert(obj[2]); </script> 2.如果不懂JSON,采用传统的方法: <s

js方式清空表单数据的两种方式

方法1:遍历页面元素 /* 清空FORM表单内容  id:表单ID*/ function ClearForm(id) { var objId = document.getElementById(id); if (objId == undefined) { return; } for (var i = 0; i < objId.elements.length; i++) { if (objId.elements[i].type == "text") { objId.elements