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. 谈谈关键字final

    final:可用于修饰类.方法.变量,表示它修饰的类.方法和变量不可改变. (1)修饰变量:变量只能被赋值一次,赋值后不能更改.按照Java代码惯例,final变量就是常量,而且通常常量名要大写: ① ...

  2. setValue:forUndefinedKey this class is not key value coding-compliant for the key

    下午开发过程中遇到一个错误,结果被的真惨,从上午 11 点查错一直查到下午 2 点才找到错误的原因,真的郁闷的不行. 关于查错这么久,主要的原因是:   1. 自己对 IOS 开发还不熟悉2. 不知道 ...

  3. C# 如何提取SaveFileDialog的保存路径

    直接上代码 public TestOne() { InitializeComponent(); SaveFileDialog();//调用打开SaveFileDialog 保存对话框 } #regio ...

  4. php的mysql\mysqli\PDO(二)mysqli

    原文链接:http://www.orlion.ga/1147/ mysqli有面向对象风格和面向过程风格,个人感觉还是用面向对象风格比较好(毕竟是面向对象) 1.mysqli::_construct( ...

  5. Servlet在启动时加载的tomcat源码(原创)

    tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...

  6. php创建新用户注册界面布局实例

    php创建新用户注册界面布局实例 <!DOCTYPE> <html> <head> <title>Load page</title> < ...

  7. Java 理论与实践: 正确使用 Volatile 变量--转

    原文地址:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的  ...

  8. opencv 之 icvCreateHidHaarClassifierCascade 分类器信息初始化函数部分详细代码注释。

    请看注释.这个函数,是人脸识别主函数,里面出现过的函数之一,作用是初始化分类器的数据,就是一个xml文件的数据初始化. static CvHidHaarClassifierCascade* icvCr ...

  9. 【知识积累】SBT+Scala+MySQL的Demo

    一.背景 由于项目需要,需要在Sbt+Scala项目中连接MySQL数据库.由于之前使用Maven+Java进行依赖管理偏多,在Sbt+Scala方面也在不断进行摸索,特此记录,作为小模块知识的积累. ...

  10. github上传项目(使用git)、删除项目、添加协作者

    一.注册github账号 github网址https://github.com/ 下一步 然后,你的邮箱会收到一封邮件,进行邮箱验证就行了 二.创建github仓库 登录你的github,在首页的右方 ...