JavaScript 整理筆記(三)
阿新 • • 發佈:2019-01-06
1.1 語法
1.1.6 表示式
表示式後面一般跟著: 一個運算子 與 另一個表示式 三元運算子 函式呼叫 屬性提取表示式 運算子優先順序 從上往下優先順序由高到低 . [] () - 提取屬性與呼叫函式 delete new typeof + - ! - 一元運算子 * / % - 乘法 除法 求餘 + - - 加法/連線 減法 >= <= > < - 大於等於 小於等於 大於 小於 === !== - 全等於 不去等於 && - 邏輯與 || - 邏輯或 ?: - 三元運算子 typeof 運算子產生的值只有 'number'、'string'、'boolean'、'undefined'、'function'和'object'這六個值。 其中 typeof null === 'object', typeof [] === 'object',這是不對的。 通常用函式來判斷: function DataType(obj, type) { return Object.prototype.toString.call(obj) === "[object " + type + "]" ? true : false; } + 運算子 可以進行加法運算或字串連線。加法時確保兩個運算數都是數字。否則會進行隱式轉換。 例: '0' + 1 === '01'; // true 1 + '0' === '10'; // true 1 + 0 === 1; // true && 運算子 邏輯與 真&&真為真,真&&假為假,假&&真為假,假&&假為假。 例1: var a = 0; a && a++; // false a; // 0 例2: var b = 1; b && b++; // true b; // 2 第一個運算數(或表示式)如果為false,則不執行第二個運算數(或表示式)。 第一個運算數(或表示式)如果為true,則執行第二個運算數(或表示式)。 || 運算子 邏輯或 真||真為真,真||假為真,假||真為真,假||假為假。 例1: var c = 0; c || c++; // true c; // 1 例2: var d = 1; d || d++; // true d; // 1 第一個運算數(或表示式)如果為false,則執行第二個運算數(或表示式)。 第一個運算數(或表示式)如果為true,則不執行第二個運算數(或表示式)。 ! 運算子 邏輯非 !真為假,!假為真。 例: !true === false; // true !false === true; // true !undefined === true; // true !null === true; // true !"" === true; // true !0 === ture; // true !NaN === true; // true
1.2 物件
1.2.1 物件字面量
建立新物件值的表示法。 例: var obj = {}; var obj_2 = { name: "Ama_zhe", "": "hello world" }; obj_2[""] === "hello world"; // true 屬性名可以是包括空字串的任何字串。屬性名如果是合法的JavaScript識別符號 並且不是保留字,則屬性名不需要引號。 例: var obj_3 = { value: 1, "first-name": "fan" }
1.2.3 檢索
檢索物件裡的值
優先使用.語法,其次是[]語法。如果檢索的屬性名是一個表示式來表示則使用[]來獲取。
檢索不存在的屬性會返回undefined。
可以使用||運算子來預設填充:
例:
var hello = obj_3.status || "0"; // "0"
如果從undefined中獲取屬性會報錯,用&&來提前判斷
例:
var hi = obj_3.status && obj_3.status.value; // undefined
1.2.4 更新
物件的屬性名如果已經存在,再對物件的屬性名賦值時會更新其屬性的值。 例: obj_3.value = 2; obj_3.value === 2; // true 如果物件之前沒有該屬性名,則會給物件新增該屬性。 例: obj_3.name = "Stafan"; obj_3; // { value: 2, "first-name": "fan", name: "Stafan" }
1.2.5 引用
物件是通過引用來傳遞值。它們永遠不會被複制。
var a = obj_3;
a.status = "1";
var b = obj_3.status;
b; // "1" a和obj_3指向同一個物件引用,a.status相當於給obj_3添加了status屬性,所有b的值為"1"。
var c = {}, d = {}, e = {}; 分別引用不同的空物件
c === d; // false
c === e; // false
d === e; // false
var f = g = h = {}; 都引用同一個空物件
f === g; // true
f === h; // true
g === h; // true
1.2.6 原型
每個物件都連線到一個原型物件。所有通過字面量建立的物件都連線到 Object.prototype。
if(typeof Object.create != "function"){
Object.create = function(obj){
var Fn = function(){};
Fn.prototype = obj;
return new Fn();
}
}
var obj = {
name: "a",
value: "100"
};
var obj2 = Object.create(obj);
obj2.name = "b"; 該物件改變是不會影響到該物件的原型
obj2.value = "200"; 該物件改變是不會影響到該物件的原型
obj.name; // "a"
obj.value; // "100"
obj2.name; // "b" 該物件改變是不會影響到該物件的原型
obj2.value; // "200" 該物件改變是不會影響到該物件的原型
但是在檢索物件的屬性時,如果該物件沒有要檢索的屬性,則會從原型物件中去獲取。如果物件及
其原型鏈中都沒有要獲取的屬性,則返回 undefined。
obj.data = "data";
obj2.data; // "data"
obj2.opt; // undefined
1.2.7 反射
檢查物件的屬性的型別:
var obj3 = {
name: "Ama_zhe",
number: 2,
obj: {}
};
typeof obj3.name === "string"; // true
typeof obj3.number === "number"; // true
typeof obj3.obj === "object"; // true
typeof obj3.aaa === "undefined"; // true
檢查原型鏈中的任何屬性都會返回 "funtion":
typeof obj3.toString === "function"; // true
typeof obj3.constructor === "function"; // true
typeof obj3.valueOf === "function"; // true
hasOwnProperty 會檢查物件獨有的屬性,而不會檢查原型鏈:
obj3.hasOwnProperty(name) === true; // true
obj3.hasOwnProperty(toString) === false; // true
1.2.8 列舉
for...in 會列舉物件中的所有的屬性名(包括原型鏈中的屬性),用hasOwnProperty 和
typeof 來過濾掉不想要的屬性或函式。
屬性名出現的順序是不確定的,如果想要屬性以特定的順序出現,最好避免使用for...in。
1.2.9 刪除
delete 運算子用來刪除物件的屬性。不會刪除原型鏈中的同名屬性。
例1:
var obj6 = {
a: 1,
b: 2
};
delete obj6.a;
obj6; // { b: 2 }
例2:
var obj = {
a: 1,
b: 2,
name: "seven"
};
var Fn = function(){};
Fn.prototype = obj;
var obj_n = new Fn();
obj_n.name = "eight";
obj_n.name; // "eight"
delete obj_n.name;
obj_n.name; // "seven"
1.2.10 減少全域性變數汙染
最小化全域性變數的方法就是隻建立唯一的一個全域性變數:
var GLOBAL_VARIABLE = {};
定義其他的變數為該全域性變數的屬性:
GLOBAL_VARIABLE.API = {
common_link: ""
};
GLOBAL_VARIABLE.initFn = {
add: function(){
var sum = 0;
Array.apply(this, arguments).map(function(a){
sum += a;
});
return sum;
}
};
——–內容繫個人整理,如有錯誤,歡迎指出。謝謝!——–