對象的本質和意義:(object)
對象是一個整體,用於描述一個事物的所有的相關信息;
內容之間用“,”分隔,最后一個不加逗號;
對象中一般有屬性(靜態)和方法(動態,方法是作為屬性來存儲的函數。):
你可以想象成對象就是一個人,這個人的身高,體型,性格是他本身的屬性,是靜態的;而這個人喜歡打籃球,喜歡吃東西,這就是他的動作也就是方法,是動態的;
使用{ }去定義一個對象,數據由鍵值對的組合方式;值可以是任意數據類型;
var obj = { sex : "不詳", socre : 100, flag : true, sing : function{ console.log("愛唱歌") }, play : function{ console.log("打游戲") } }
對象的操作: 訪問值:(查) console.log(obj.sex); console.log(obj["socre"]); console.log(obj.sing()); 添加一個屬性:(增) obj.hobby = "睡覺"; obj["weight"] = “50kg”; obj.dance = function(){ } 修改:(改) obj.sex = “女”; obj[“socre”] = 99; 刪除:(刪) delete obj.flag; delete obj["sex"];
訪問屬性的時候,可以用obj.屬性或者obj["屬性"];需要執行方法(了解這個人)的時候,需要用“.”的方式去調用。
在W3C的官網文檔中提到:
如果通過關鍵詞 "new" 來聲明 JavaScript 變量,則該變量會被創建為對象:
var x = new String(); // 把 x 聲明為 String 對象 var y = new Number(); // 把 y 聲明為 Number 對象 var z = new Boolean(); // 把 z 聲明為 Boolean 對象
請避免將字符串、數值或邏輯聲明為對象。他們會增加代碼的復雜性並降低執行速度。
擴展:
JavaScript有3大對象,分別是本地對象
、內置對象
和宿主對象;
這里引用別人的話:本地對象也經常被叫做原生對象或內部對象,包含Global和Math在內的內置對象在《JavaScript高級程序設計》里也被叫做單體內置對象,很多時候,干脆也會直接把本地對象和內置對象統稱為“內置對象”,也就是說除了宿主對象,剩下的都是ECMAScript的內部的“內置”對象。
數組:就是一組數據的集合
js中數組的特點:(有下標,從0開始;有長度,length)
①數組定義時無需指定數據類型;
②數組定義時可以無需指定數組長度;
③數組可以存儲任何數據類型的數據;
④一般是相同的數據類型。
數組的創建方式:
①字面量定義:var arr = [值1,值2,值3];(數組文本方法)
②構造函數創建:new Array(值1,值2,值3); //當括號中沒有值的時候,打印結果為[ ](空數組);
創建數組並指定長度(只有一個值的時候為起初的長度,可自己增加值來改變這個長度):new Array(size);
W3C中提出,出於簡潔、可讀性和執行速度的考慮,請使用第一種方法(數組文本方法)
var ary = new Array(4); ary[0] = 12; ary[1] = 13; ary[2] = 14; //加入值 數組名[下標] = 值 長度為4,只加入了三個值,則第四個值為undefined;
數組操作:
數組名.方法
數組和對象的區別
在 JavaScript 中,數組使用數字索引。
在 JavaScript 中,對象使用命名索引。
數組是特殊類型的對象,具有數字索引。
在數組中使用數字(下標)來訪問其“元素”。
在對象使用名稱(屬性名稱和方法名稱)來訪問其“成員”。
在數據類型檢驗的時候,利用typeof來檢驗數組的時候說過會返回一個object;那么怎么檢驗一個數是不是數組呢;
①為了解決這個問題,ECMAScript 5 定義了新方法 Array.isArray()
Array.isArray(fruits); // 返回 true
②也可以自己封裝出一個isArray方法
function isArray(x) { return x.constructor.toString().indexOf("Array") > -1; }
③假如對象由給定的構造器創建,則 instanceof 運算符返回 true:
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits instanceof Array // 返回 true
④最准確的數據類型的判斷Object.prototype.toString.call()
let a = "string"; let b = 111; let c = {}; let d = [1, 2, 3]; let e = function () { console.log("eee"); } let f = undefined; let g = null; let h = new Date(); let i = /test/; let j = true; console.log(Object.prototype.toString.call(a) === '[object String]');//true console.log(Object.prototype.toString.call(b) === '[object Number]');//true console.log(Object.prototype.toString.call(c) === '[object Object]');//true console.log(Object.prototype.toString.call(d) === '[object Array]');//true console.log(Object.prototype.toString.call(e) === '[object Function]');//true console.log(Object.prototype.toString.call(f) === '[object Undefined]');//true console.log(Object.prototype.toString.call(g) === '[object Null]');//true console.log(Object.prototype.toString.call(h) === '[object Date]');//true console.log(Object.prototype.toString.call(i) === '[object RegExp]');//true console.log(Object.prototype.toString.call(c) === '[object Object]');//true console.log(Object.prototype.toString.call(d) === '[object Object]');//false console.log(Object.prototype.toString.call(e) === '[object Object]');//false
Array.from(對象)可以將一個具有length長度的類數組(偽數組)轉換成真正的數組。