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