JS中的数据类型:

2大类
 原始类型:值保存在变量本地的数据类型
  5种:Number String Boolean undefined null
  Number:8bytes 舍入误差-->四舍五入
  String:每个英文字符 1byte
      每个汉字字符 2bytes
      一旦创建内容不可改变
  Boolean: true false
引用类型:值不保存在变量本地的数据类型

  js中的变量 vs 数据库
   内存中    硬盘上的文件
   临时的    持久的
   客户端    服务器端只存一份

一般用typeof判断数据类型:如下>注意最后一个

console.log(typeof("Hello")); //string
console.log(typeof(123)); //number
console.log(typeof({a:1})); //object
console.log(typeof(function f(){})); //function
console.log(typeof([])); //object

为什么不是array呢?该如何判断一个对象是object还是array类型呢?

  typeof可以检测基本类型包括 undefined, string, number, boolean,但是对于检测对象就不靠谱了。

  不只是Array,javascript中的对象,包括 Date, String, Boolean, Number, Object, Function, Array, RegExp, Error 使用typof只会返回 "object"。

下面给出4中方法:

//如果当前浏览器的Array构造函数对象中不包含isArray
if(!Array.isArray){
// 为Array构造函数添加isArray方法
Array.isArray=function(obj){
//判断obj是不是数组类型4种
//1. 如果Array.prototype在obj的原型链中
//return Array.prototype.isPrototypeOf(obj);
//2. 用instanceof: 语法:obj instanceof 构造函数名
//return obj instanceof Array;
//实例:一个构造函数创建出的每个具体对象
//3. 原型对象的constructor属性
//return obj.constructor==Array;
//4. 利用Object原型的toString方法
/*call,apply
call,在调用方法的一瞬间更换调用方法的对象*/
return Object.prototype.toString.apply(obj)=="[object Array]";
}
//
}

注意:(来自https://segmentfault.com/q/1010000000130605)

使用 instanceof 或者 constructor 来检测 Array 也不是靠谱的办法。

如果是待检测的数组来自一个iframe的数组时,instanceof和contructor都会失效。

由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的。

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // [1,2,3]
arr instanceof Array; // false
arr.constructor === Array; // false

javascript是判断对象是否是数组的更多相关文章

  1. JavaScript中判断对象类型方法大全1

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  2. JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  3. 转 JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  4. JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性

    前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...

  5. js判断对象是否为数组

    1.ECMAScript5中有一个现成的方法:Array.isArray(). var obj = {1:[1],2:[2]}, arr = [1], str = "1"; Arr ...

  6. Js判断对象是否是数组的方法

    1.ECMAScript5中有一个现成的方法:Array.isArray(). var obj = {1:[1],2:[2]}, arr = [1], str = "1"; Arr ...

  7. Javascript进阶篇——( JavaScript内置对象---下)--Array数组对象---笔记整理

    Array 数组对象数组对象是一个对象的集合,里边的对象可以是不同类型的.数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的数组定义的方法: 1. 定义了一个空数组: var ...

  8. Javascript 中判断对象为空

    发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是 ...

  9. JavaScript中判断对象类型方法大全2

    在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object ...

随机推荐

  1. Base64编码原理分析

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位.字节. 位:"位(bit)"是计算机中最小的数据单位.每一位 ...

  2. SSIS Destination 组件使用Fast-Load mode出错

    查看一个Package的历史Message 数据,发现 DataFlow Task 经常出错,错误信息的Description是: Description: "While reading c ...

  3. 【Win10应用开发】相对布局(RelativePanel)

    外面的雨下得很大,老周就决定雨下漫笔了. 今天咱们说一个新控件——RelativePanel.本质上,它就是一个面板,面板干啥用的?面板就是一个容器,里面可以放其他对象,就像我们小时候玩的七巧板一样, ...

  4. OpenCASCADE Conic to BSpline Curves-Parabola

    OpenCASCADE Conic to BSpline Curves-Parabola eryar@163.com Abstract. Rational Bezier Curve can repre ...

  5. windows下实现Git在局域网使用

    1.首先在主机A上创建一个文件夹用于存放你要公开的版本库.然后进入这个文件夹,右键->Git create repository here,弹出的窗口中勾选Make it Bare!之后将这个文 ...

  6. jquery ajax(实现单独提交某个form)

    function submitTaskScore(formid) {//formid表示的是表单的id $.ajax({ type:"post", url:"compan ...

  7. 如何用Perl截取报文

    在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于 <InterBOSS> ... ... ... </InterBOSS> 一个后台日志有多个报文,每个报文可由 ...

  8. T-Sql(六)触发器(trigger)

    不知不觉讲到触发器了,一般我们做程序的很少接触到触发器,触发器的操作一般是DB人员来完成. 然而有的时候一些简单的业务需要我们自己去完成,不能每次都去麻烦DB人员,所以说,编程人员要全才,除了编程以为 ...

  9. T-Sql(五)xml操作

    t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...

  10. Sublime写MarkDown实时预览

    [TOC] Sublime写MarkDown实时预览 Sublime作为神器,实至名归. 首先 1.安装Sublime,并安装Package Control,这里不多说. 2.安装MarkDown P ...