本身總結一下javascript的基礎知識,但願對你們有用,也但願你們來拍磚,畢竟是我的的理解啊javascript
string
)var num = 123; console.log(typeof num); //
做用:判斷指定屬性是否存在於指定的對象中。 若是指定的屬性存在於指定的對象中,則 in 運算符會返回 true。 語法: 屬性 in 對象 返回值:true 或者 false 示例: var obj = { age: 18 }; var hasAge = "age" in obj; console.log(hasAge); //
1 in 2 瀏覽器能力檢測
值類型:變量中存儲的是數值自己 引用類型:變量中存儲的是數據的引用(地址) 對象中的屬性能夠是值類型也能夠是引用類型
var o = new Object(); function foo(obj) { obj.name = "腐女"; obj = new Object(); obj.name = "屌絲"; } foo(o); console.log(o.name); //
|| 若是第一個爲真 就返回第一個表達式, 若是爲假 則返回第二個表達式 && 若是第一個爲假 就返回第一個表達式, 若是爲真則返回第二個表達式
function fn(num) { // 若是傳入num,就打印num的值 // 若是沒有傳入 就打印 沒有參數 }
做用:刪除一個對象的屬性。 語法:delete 屬性名 返回值: true 或 false 用法: 1 刪除數組中的元素 2 刪除對象的屬性或方法 3 刪除沒有用 var 聲明 變量
// 語法:
try { // 可能出現錯誤的代碼 } catch ( e ) { // 出現錯誤會執行這裏的代碼 } finally { // 可選 // 不管是否出現異常, 最後執行 } // 手動拋出異常 throw new Error("別瞎搞"); throw "這都行???";
// 函數聲明
function foo() {} // 函數表達式 var foo = function foo() {}; // 不推薦這麼作!! if(true) { function f() { console.log(true); } } f();
表達式:(有值) 表達式(expression)是JavaScript中的一個短語,JavaScript解釋器會將其計算出一個值。 表達式能夠是:數據 或者 數據和運算符的組合 例如:一、"abc"、true、1 + 二、i++、a === b ? a : b 、a = 1 語句:(帶分號) 語句是JavaScript的句子或命令,以分號結束。 var a = 1;
// jQuery
$("body").append("<p>jQuery建立節點就是如此瀟灑</p>"); // js var p = document.createElement("p"); var txt = document.createTextNode("creat E..,creat T..真麻煩"); p.appendChild(txt); document.body.appendChild(p);
面向過程:全部的細節、步驟、過程,要一步一步親歷親爲(執行者) 面向對象:找到能完成這個事情的對象,讓它幫你完成就行(調度者) 生活中的例子: 作飯(叫外賣) 開公司
問題:面向對象這麼好,面向過程就沒用了?面向對象是對面向過程的一個封裝css
案例:給div和p添加紅色邊框java
// 經過標籤名獲取元素
function tag(tagStr) { return document.getElementsByTagName(tagStr); } var divs = tag("div"); for(var i = 0; i < divs.length; i++) { divs[i].style.border = "1px dotted red"; } var ps = tag("p"); for(var i = 0; i < ps.length; i++) { ps[i].style.border = "1px dotted red"; }
// 使用對象
var itcast = { id: function(idStr) { return document.getElementById(idStr); }, tag: function(tagStr) { return document.getElementsByTagName(tagStr); } };
var itcast = { // 元素獲取模塊 getElem: { tag: function() {}, id: function() {} }, // 樣式模塊 css: { addStyle: function() {}, removeStyle: function() {}, hasStyle: function() {} } };
getElementById getElementsByTagName getElementsByClassName
appendChild insertBefore removeChild replaceChild cloneNode createElement createTextNode(建立文本節點)
getAttribute setAttribute removeAttribute
className innerHTML innerText/textContent value children
在DOM中全部的東西所有都是對象,因此,使用DOM很是簡單方便 jQuery中全部的東西也都是對象
// json 的表示法, 對象的直接量(字面量)
var p = { name: "jim", age: 19, sex: "男", sayHello: function() { alert("你好,哈哈哈哈"); } }; p.sayHello(); // 此時能夠把對象稱爲:關聯數組 p["sayHello"]();
例如: 描述一個商品 Goods(name, price, img, count, pDate) 假若有 100 件
var Person = function() { this.name = "jim"; this.age = 19; this.gender = "男"; this.sayHello = function() { alert("你好,哈哈哈哈"); }; }; // 建立對象(構造函數Person的對象) var p = new Person(); // 訪問對象的 屬性 console.log(p.name); // 訪問對象的 方法 p.sayHello();
寫一個學生 Student, 要求有 姓名性別年齡和課程分數(語文, 數學, 英語)和說話的方法
// 不使用函數
var area = 10 * 10 / 2; // 封裝成函數 function getArea() { var area = 10 * 10 / 2; return area; } // 改進 function getArea(bottom, height) { return bottom * height / 2; } getArea(10, 20);
4 函數調用時不傳入參數,則函數內部獲取參數的值爲:undefinedweb
練習:寫一個函數打印一段文字,要求:傳入什麼內容,就打印什麼內容面試
形參(形式參數),即函數定義時的參數,只起到佔位的做用,等到函數被調用的時候,會被傳入的具體值代替。【聯想數學公式】 s = d * h / 2; 實參(實際參數),即函數被調用時的參數,是一個具體的值或者表達式(一、"老司機"、true、[2, 2]、{ name: "two"} 等)
構造函數中的屬性和方法,會在調用的時候被處理,即會消耗內存。 new 出來的對象,都是一個單獨副本 new 一個對象就佔用一分內存,new 多少對象就佔用多少分內存。 可是對於構造函數中的方法來講,每一個對象的方法都是相同的(或者說應該是被共享的)
對於典型的淘寶商品詳情頁,經測試發現,每增長一個 DOM 節點,會致使首屏渲染時間延遲約 0.5msexpress
function Person() {} // prototype 即 原型 Person.prototype.legs = 2; var p = new Person(); console.log(p.legs);
在訪問對象的某一個屬性 (方法)的時候: 1 首先會在當前對象中查找有沒有該屬性 2 若是當前對象沒有, 就會在構造方法的定義規則中查找(當前對象) 3 若是沒有, 就會到與對象聯繫起來的 構造函數的 prototype 屬性的值中找
// 對象會到 與它聯繫的 prototype 中找數據
// 能夠考慮將共享的數據, 放到 裏面 function Person(name) { this.name = name; } Person.prototype.sayHello = function() { alert(this.name); }; var p = new Person(); p.sayHello();
獲取操做: 遵循屬性查找原則 賦值操做(只與當前對象有關): 只會操做對象自己,若是對象中沒有該屬性則建立該屬性,並賦值;若是對象中有,則修改
__proto__
__proto__
是非標準屬性對象中有一個屬性 叫 __proto__ 對象的 __proto__ 與建立它的構造函數的 prototype 是一個東西
function F() {} var o = new F(); console.log(o.__proto__ === F.prototype);
F.prototype 原型屬性 f.__proto__ 原型對象 F.prototype 是 構造函數F的 原型屬性 f.__proto__ 是 對象f的 原型對象