對象字面量: var obj = {};
javascript
構造函數: var obj = new Object();
前端
Object.create(): var obj = Object.create(Object.prototype);
vue
png24
位的圖片在iE6瀏覽器上出現背景,解決方案是作成PNG8
java
瀏覽器默認的margin
和padding
不一樣。解決方案是加一個全局的*{margin:0;padding:0;}
來統一,,可是全局效率很低,通常是以下這樣解決:react
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{ margin:0; padding:0; }
IE
下,event
對象有x
,y
屬性,可是沒有pageX
,pageY
屬性jquery
Firefox
下,event
對象有pageX
,pageY
屬性,可是沒有x,y
屬性.程序員
依照 Promise/A+
的定義,Promise
有四種狀態:web
pending:
初始狀態, 非 fulfilled
或 rejected.
後端
fulfilled:
成功的操做.數組
rejected:
失敗的操做.
settled: Promise
已被fulfilled
或rejected
,且不是pending
另外, fulfilled
與 rejected
一塊兒合稱 settled
Promise
對象用來進行延遲(deferred
) 和異步(asynchronous
) 計算
構造一個 Promise
,最基本的用法以下:
var promise = new Promise(function(resolve, reject) { if (...) { // succeed resolve(result); } else { // fails reject(Error(errMessage)); } });
Promise
實例擁有 then
方法(具備 then
方法的對象,一般被稱爲thenable
)。它的使用方法以下:
promise.then(onFulfilled, onRejected)
接收兩個函數做爲參數,一個在 fulfilled
的時候被調用,一個在rejected
的時候被調用,接收參數就是 future
,onFulfilled
對應resolve
, onRejected
對應 reject
jquery
源碼封裝在一個匿名函數的自執行環境中,有助於防止變量的全局污染,而後經過傳入window
對象參數,可使window
對象做爲局部變量使用,好處是當jquery
中訪問window
對象的時候,就不用將做用域鏈退回到頂層做用域了,從而能夠更快的訪問window對象。一樣,傳入undefined
參數,能夠縮短查找undefined
時的做用域鏈
jquery
將一些原型屬性和方法封裝在了jquery.prototype
中,爲了縮短名稱,又賦值給了jquery.fn
,這是很形象的寫法
有一些數組或對象的方法常常能使用到,jQuery
將其保存爲局部變量以提升訪問速度
jquery
實現的鏈式調用能夠節約代碼,所返回的都是同一個對象,能夠提升代碼效率
Vue.js
一個用於建立 web
交互界面的庫,是一個精簡的 MVVM
。它經過雙向數據綁定把 View
層和 Model
層鏈接了起來。實際的 DOM
封裝和輸出格式都被抽象爲了Directives
和 Filters
AngularJS
是一個比較完善的前端MVVM
框架,包含模板,數據雙向綁定,路由,模塊化,服務,依賴注入等全部功能,模板功能強大豐富,自帶了豐富的 Angular
指令
react
React
僅僅是 VIEW
層是facebook
公司。推出的一個用於構建UI
的一個庫,可以實現服務器端的渲染。用了virtual dom
,因此性能很好。
特色:
Javascript
運行環境Chrome V8
引擎進行代碼解釋I/O
優勢:
缺點:
核CPU
,不能充分利用CPU
CommonJS
是服務器端模塊的規範,Node.js
採用了這個規範。CommonJS
規範加載模塊是同步的,也就是說,只有加載完成,才能執行後面的操做。AMD
規範則是非同步加載模塊,容許指定回調函數
AMD
推薦的風格經過返回一個對象作爲模塊對象,CommonJS
的風格經過對module.exports
或exports
的屬性賦值來達到暴露模塊對象的目的
內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在
setTimeout
的第一個參數使用字符串而非函數的話,會引起內存泄漏
閉包、控制檯日誌、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)
cookie
session
url
重寫
隱藏input
ip
地址
Undefined
、Null
、Boolean
、Number
、String
Object
是 JavaScript
中全部對象的父對象
數據封裝類對象:Object
、Array
、Boolean
、Number
和 String
其餘對象:Function
、Arguments
、Math
、Date
、RegExp
、Error
不要在同一行聲明多個變量
請使用===/!==
來比較true/false
或者數值
使用對象字面量替代new Array
這種形式
不要使用全局函數
Switch
語句必須帶有default
分支
If
語句必須使用大括號
for-in
循環中的變量 應該使用var
關鍵字明確限定做用域,從而避免做用域污
棧:原始數據類型(Undefined
,Null
,Boolean
,Numbe
r、String
)
堆:引用數據類型(對象、數組和函數)
兩種類型的區別是:存儲位置不一樣;
原始數據類型直接存儲在棧(stack
)中的簡單數據段,佔據空間小、大小固定,屬於被頻繁使用數據,因此放入棧中存儲;
引用數據類型存儲在堆(heap
)中的對象,佔據空間大、大小不固定,若是存儲在棧中,將會影響程序運行的性能;引用數據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。當解釋器尋找引用值時,會首先檢索其
在棧中的地址,取得地址後從堆中得到實體
對象字面量的方式
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
用function
來模擬無參的構造函數
function Person(){} var person=new Person();//定義一個function,若是使用new"實例化",該function能夠看做是一個Class person.name="Mark"; person.age="25"; person.work=function(){ alert(person.name+" hello..."); } person.work();
用function
來模擬參構造函數來實現(用this
關鍵字定義構造的上下文屬性)
function Pet(name,age,hobby){ this.name=name;//this做用域:當前對象 this.age=age; this.hobby=hobby; this.eat=function(){ alert("我叫"+this.name+",我喜歡"+this.hobby+",是個程序員"); } } var maidou =new Pet("麥兜",25,"coding");//實例化、建立對象 maidou.eat();//調用eat方法
用工廠方式來建立(內置對象)
var wcDog =new Object(); wcDog.name="旺財"; wcDog.age=3; wcDog.work=function(){ alert("我是"+wcDog.name+",汪汪汪......"); } wcDog.work();
用原型方式來建立
function Dog(){ } Dog.prototype.name="旺財"; Dog.prototype.eat=function(){ alert(this.name+"是個吃貨"); } var wangcai =new Dog(); wangcai.eat();
用混合方式來建立
function Car(name,price){ this.name=name; this.price=price; } Car.prototype.sell=function(){ alert("我是"+this.name+",我如今賣"+this.price+"萬元"); } var camry =new Car("凱美瑞",27); camry.sell();
它的功能是把對應的字符串解析成JS
代碼並運行
應該避免使用eval
,不安全,很是耗性能(2
次,一次解析成js
語句,一次執行)
由JSON
字符串轉換爲JSON對象的時候能夠用eval,var obj =eval('('+ str +')')
undefined
表示不存在這個值。
undefined
:是一個表示"無"的原始值或者說表示"缺乏值",就是此處應該有一個值,可是尚未定義。當嘗試讀取時會返回 undefined
例如變量被聲明瞭,但沒有賦值時,就等於undefined
null
表示一個對象被定義了,值爲「空值」
null
: 是一個對象(空對象, 沒有任何屬性和方法)
例如做爲函數的參數,表示該函數的參數不是對象;
在驗證null
時,必定要使用 ===
,由於 ==
沒法分別null
和 undefined
[1, NaN, NaN]
由於 parseInt
須要兩個參數 (val, radix)
,其中radix
表示解析時用的基數。
map
傳了 3
個(element, index, array)
,對應的 radix
不合法致使解析失敗。
use strict
是一種ECMAscript 5
添加的(嚴格)運行模式,這種模式使得 Javascript 在更嚴格的條件下運行,使JS
編碼更加規範化的模式,消除Javascript
語法的一些不合理、不嚴謹之處,減小一些怪異行爲
JSON(JavaScript Object Notation)
是一種輕量級的數據交換格式
它是基於JavaScript
的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小
JSON
字符串轉換爲JSON對象:
var obj =eval('('+ str +')'); var obj = str.parseJSON(); var obj = JSON.parse(str);
JSON
對象轉換爲JSON字符串:var last=obj.toJSONString(); var last=JSON.stringify(obj);
defer
和async
、動態建立DOM
方式(用得最多)、按需異步載入js
同步:瀏覽器訪問服務器請求,用戶看獲得頁面刷新,從新發請求,等請求完,頁面刷新,新內容出現,用戶看到新內容,進行下一步操做
異步:瀏覽器訪問服務器請求,用戶正常操做,瀏覽器後端進行請求。等請求完,頁面不刷新,新內容也會出現,用戶看到新內容