最近在看廖雪峯的js教程,重溫了下js基礎,記下一些筆記,好記性不如爛筆頭嘛javascript
use strict
JavaScript
引擎是一個事件驅動的執行引擎,代碼老是以單線程執行NaN
, Infinity
都是number
類型 NaN
表示不是一個數字,Infinity
表示無窮大,NaN和其餘任何數字都不相等Null
表示空值 ,undefined
表示未定義var
java
es6
中表示多行字符串能夠用```,在此以前都是用
\n`30
和字符串"30"
是兩個不一樣的元素undefined
in
判斷對象是否具備某屬性,屬性可能爲對象自有屬性也可能爲繼承屬性,若是查看是否爲對象的自有屬性,用hasOwnProperty
null
,undefined
,0
,NaN
,""
視爲false
,其餘的都爲true
for
,for in
,while
,do while
,es6
引入新的循環for of
,forEach
循環es6
的Map
,Set
,iterable
元素Array
,Map
,Set
都是屬於iterable
類型,均可以用for of
進行循環iterable
內置forEach
循環return
的函數返回undefined
arguments
,只在函數內部起做用,而且永遠指向當前函數的調用者傳入的全部參數,arguments
相似Array
但它不是一個Array
,調用時即便不傳遞參數也能夠經過arguments
獲取到全部參數es6
的新參數rest
來代替多個參數window
,全部的全局變量(包含函數)都會綁定爲全局對象window
的一個屬性ReferenceError
錯誤名字空間
全局變量會綁定到window
上,不一樣的JavaScript
文件若是使用了相同的全局變量,或者定義了相同名字的頂層函數,都會形成命名衝突,而且很難被發現,減小衝突的一個方法是把本身的全部變量和函數所有綁定到一個全局變量中,許多著名的JavaScript
庫都是這麼幹的:jQuery
,YUI
,underscore
等等es6
的快級做用域元素let
,const
,let
用於定義塊級變量,const
用於定義常量,常量建議所有大寫字母表示解構賦值
,能夠快速的把數組、對象的屬性賦值給變量this
是一個特殊變量,它始終指向當前對象this
調用,若是以對象的方法形式調用,好比xiaoming.age()
,該函數的this
指向被調用的對象,也就是xiaoming
,若是單獨調用函數,好比getAge()
,此時,該函數的this
指向全局對象,也就是window
ECMA
決定,在strict
模式下讓函數的this
指向undefined
apply
,call
方法,apply裝飾器高階函數的概念
,參數的爲函數的函數爲高階函數array
的map
,reduce
用法,調用map
的回調函數和實際的函數參數可能不同致使異常的結果 array.prototype.map map
的回調有4個參數,而若是如array.map(parseInt),parseInt只有2個參數,並且第二個參數和calltable第二個參數性質不同,形成結果異常,示例請看廖雪峯的js小示例array
的filter
用法,用於對數組值的過濾array
的sort
排序函數,默認的是經過字符串的ascii
碼進行排序,固然,sort
也是個高階函數,你能夠自定義排序算法錯誤傳播
若是在一個函數內部發生了錯誤,它自身沒有捕獲,錯誤就會被拋到外層調用函數,若是外層函數也沒有捕獲,該錯誤會一直沿着函數調用鏈向上拋出,直到被JavaScript引擎捕獲,代碼終止執行es6
的箭頭函數(也屬於匿名函數)·
開始,表面參數的個數不限制 function (x,y,...rest) rest
表示可選參數typeof
檢測類型,[],null,{}
返回的都是object
,undefined
返回的是undefined
typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof Math.abs; // 'function' typeof null; // 'object' typeof []; // 'object' typeof {}; // 'object'
123..toString(); // '123', 注意是兩個點! (123).toString(); // '123'
node
查找模塊的順序依次爲內置模塊
,全局模塊
,當前模塊
node.js
加載模塊時使用了匿名函數加載模塊的方式來規避各個模塊內變量衝突的問題if (typeof(window) === 'undefined') { console.log('node.js'); } else { console.log('browser'); }
Date
相關var now = new Date(); now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now.getFullYear(); // 2015, 年份 now.getMonth(); // 5, 月份,注意月份範圍是0~11,5表示六月 now.getDate(); // 24, 表示24號 now.getDay(); // 3, 表示星期三 now.getHours(); // 19, 24小時制 now.getMinutes(); // 49, 分鐘 now.getSeconds(); // 22, 秒 now.getMilliseconds(); // 875, 毫秒數 now.getTime(); // 1435146562875, 以number形式表示的時間戳
json
其實是js
的一個子集json
的數據類型和js
的數據類型一致node
的同步異步的關係nodejs
底層採用C/C++
編寫,而後對外暴露爲javascript
接口CS
,BS
的由來MVVM
的原理,雙向綁定,model-dom
對應https
的原理es6
的生成器generator
js
原型繼承object.create
,__proto__
obj.xxx
訪問一個對象的屬性時,JavaScript
引擎先在當前對象上查找該屬性,若是沒有找到,就到其原型對象上找,若是尚未找到,就一直上溯到Object.prototype
對象,最後,若是尚未找到,就只能返回undefined
new functionname
,經過new
方法來建立對象window
對象有innerWidth
和innerHeight
屬性,能夠獲取瀏覽器窗口的內部寬度和高度。內部寬高是指除去菜單欄、工具欄、邊框等佔位元素後,用於顯示網頁的淨寬高。window
對應的,還有一個outerWidth
和outerHeight
屬性,能夠獲取瀏覽器窗口的整個寬高navigator
對象表示瀏覽器的信息screen
對象表示屏幕的信息location
對象表示當前頁面的URL信息document
對象表示當前頁面。因爲HTML
在瀏覽器中以DOM
形式表示爲樹形結構,document
對象就是整個DOM
樹的根節點history
對象保存了瀏覽器的歷史記錄css
的屬性在js
中換成駝峯寫法,如font-size
寫成fontSize
,p.style.fontSize = '20px'
JavaScript
代碼都不可能同時有多於1個線程在執行js
,css
默承認以跨域,其餘請求跨域須要通過處理es6
的 promise
,canvas
用法