JS中的数据类型:javascript
2大类
原始类型:值保存在变量本地的数据类型
5种:Number String Boolean undefined null
Number:8bytes 舍入偏差-->四舍五入
String:每一个英文字符 1byte
每一个汉字字符 2bytes
一旦建立内容不可改变
Boolean: true false
引用类型:值不保存在变量本地的数据类型java
js中的变量 vs 数据库
内存中 硬盘上的文件
临时的 持久的
客户端 服务器端只存一份数据库
通常用typeof判断数据类型:以下>注意最后一个segmentfault
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中方法:app
//若是当前浏览器的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 也不是靠谱的办法。spa
若是是待检测的数组来自一个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