普通---當即執行 async---異步加載,當即執行,不按照順序執行 defer---異步加載,最後執行 <noscript>
數據類型json
number NaN---未知的數值 經過inNaN(判斷是否能轉化爲數值)來判斷 infinity 指數形式:aE+n a乘10的n次方,11E-3 ===> 11*10^-3 = 0.011 undefined---未定義 null---空對象指針 string boolean object typeof操做符:undefined boolead string number object(null) function 基本轉義字符 \n換行,\b空格
控制結構windows
1.do-while 先執行,再判斷 2.while 判斷再執行 3.for ---都是爲假就跳出循環 4.for-in-迭代讀取對象的key,可能不會按照順序讀取... 5.label,break,continue 6.with---將代碼的做用域設定到特定對象中 with(a){ var x=b; var y=c; }---將做用域設定到a對象中; 等同於 var x=a.b; var y=a.c; 7.switch case x : 語句;break; default: 語句;
變量,做用域和內存數組
變量類型: 基本類型---簡單數據段 引用類型---對象類 1.對於直接賦值 a=b 基本類型傳遞值 引用類型傳遞指針,因此改變b,a會改變; 2.對於向函數傳遞參數 都是傳遞值; 執行環境及做用域 function a(){ function b(){ } } 環境棧: ↓ b的環境對象---活動對象,包括arguments變量 a的環境對象---第二級做用域 window---全局做用域
引用類型瀏覽器
經過new或者字面量的形式建立 公共方法: tostring() tolocalstring() valueof() 引用類型包括如下幾類: 1.object 2.array 3.date 得到時間 var now = new Date; 而後經過getTime()等方法 建立時間 var dateTime = new Date("2016/05/20 23:42:00"); 4.RegExp 5.Function 6.包裝類型-boolean,string,number --- var a='xx'; var b=a.length; b=2; 至關於: var a='xx'; a1=new string('xx'); b=a1.length; a1=null; 基本數據類型能使用方法,是由於轉換成了這些包裝類型,而後當即被釋放; a.color='red';---a變成包裝類型string,添加屬性color,而後被釋放 alert(a.color);---undefined,又變成了基本類型. --- var value='1'; Number(value);---轉換函數,轉成數值 new Number(value);---構造函數,構造了一個包裝類型 7.單體內置對象 Global 全局對象---最底層的對象---沒有直接調用的方法,只有經過window對象調用 window對象是Global(js語法中的最底層對象)與瀏覽器對象之和; Math
對於一個屬性--由一個name,6個特性組成; 可配置性 configurable ---可否delete刪除;可否修改特效;可否設置爲訪問器屬性; 可枚舉性 enumerable---可否for-in 數據屬性: 可修改性 writable 數值 value---默認undefined 訪問器屬性:(es5標準,ie8及如下沒有--主要 適用與移動端); set get 前三個特性,默認true,可是若是開始設置,任意一個特性,其他的默認false; 數據屬性和訪問器屬性不能混用; var a = {}; Object.defineProperty(a,"name",{ value:"lh", writable:false --- 這個時候,其他兩個屬性設置爲了false; }) var b = Object.getOwnPropertyDescriptor(a,"name"); 獲得特性名=>值組成的對象; Object.defineProperty(a,"name",{ set:function(e){ this.name=e+1; } 設置多個屬性 Object.defineProperties(a,{ name:{}, vale:{} }) Object模式 var x = new Object() x.name=''; ... 對象字面量 var x = { name:'', ... } 工廠模式 function x (){ var o = new Object(); o.name=''; ...; return o; } 構造函數 function x(){ this.name=''; } var y =new x (); 除了構造函數,這幾種方法原型鏈都是 對象--對象原型(Object.prototype)--null 構造函數是 實例化的對象(y)--實例原型(y.__proto__/x.prototype)--對象原型(Object.prototype)--null function a(){ this.fn=function(){} }---構造函數a中建立一個方法fn; var b1 = new a(); var b2 = new a(); 這個時候 b1.fn並不等於b2.fn; 要他們共用一個方法,要將方法放在原型a上; a.prototype.fn = function(){...}; ---------------------------------------- 實際使用: function student(){ this.name=prop.name||"匿名"; }; student.prototype.fn=function(){...}; function createstudent(prop){ return new student(prop||{}); } ---而後直接用 var xiaoming = createstudent();來建立 1.不要new 2.傳參數不用管順序,和有沒有,還能設置默認值... 3.徹底匹配json數據; var x = createstudent({ "name":"xiaoming", ... }) function mor(obj) { var rs = []; while(obj) { rs.push(obj); obj = Object.getPrototypeOf(obj); } return rs; } 原型上的變量,實例中賦值後,變成不繼承了??--繼承,可是優先級不一樣 q.hasOwnProperty("vv") true w.hasOwnProperty("vv") flase -- 在q中添加了vv屬性,由於調用是從上至下的,因此如今實例中查找,再去原型-- 能夠經過delete q.vv;而後調用的又是原型中的了. function empty(){};?? 實例a 構造函數b 原型c --------------------------------------------------------------------------------------------- constructor b functon Function(){} b ----------------------------------------------------------------------------------------------- prototype undefine c undefine ----------------------------------------------------------------------------------------------- __proto__ c function Empty(){} Object ----------------------------------------------------------------------------------------------- __proto__纔是原型,繼承. 定義函數時,就會有construct和prototype出現 函數的原型是個空對象,繼承自Object; new的做用是將this綁定? ------------------------------------------------------------------------------------------------ 構造函數模式+原型模式實際運用 var prop = { name:"gou", cat:"miao" } function a(){ this.cat=prop.cat||'mao' }; a.prototype={ constructor:a, 創建對象的時候,設置原型的時候.只能單個設置 eg: a.prototype.name:'="name', say:function(){ return this.say+this.name; } } function createA(){ return new a (prop||{}) } var b = createA(prop); 穩妥構造模式 function a (){ var o = new Object(); name="xx"; o.sayname=function(){ alert(name); } return o; } 適應在須要安全的地方--除了o.sayname方法,沒法訪問內部屬性;
閉包: 能訪問函數內部. 匿名函數的返回--- function a(x){ var t='he'; console.info(x); return function (x){ console.info(t,x,this); } } var b=a('he');---'he',b=function(){...};this指向windows,可是環境仍然爲a; 能訪問到t,x又做爲匿名函數的參數了,因此如b不賦值,則爲undefined; b('he');---'he,he,window'; 嚴格模式下,不能使用arguments.callee; var a = (function b(){})---用來內部調用本身; 閉包用途: function a(){ var x=1; add=function(t){ x=x+t; console.info(x); }; return function b(){ x++; console.info(x); }; } var b=a(); b();2 b();3 add(1);5 ---經過閉包,b函數賦予給全局變量b,b函數又依賴a,因此將a環境一直保存在內存中了... add沒用var建立,因此是個能訪問a內部的全局函數,能夠用來設置a內的變量;
因此拋出的錯誤都是error對象的實例
error對象: message:錯誤提示信息 name:錯誤名稱(非標準屬性) stack:錯誤的堆棧(非標準屬性) 派生的六種對象 1.syntaxError---語法錯誤 2.refrenceError---引用了不存在的變量 3.rangeError---超出範圍 4.typeError---使用變量或參數不是預期類型 5.URIError---URI相關函數的參數不正確 6.EvalError---Eval函數沒有正確執行 自定義錯誤: function a(){} a.prototype=new Error; a.contructor=a; var b=new a; throw語法 throw拋出一個對象,而後中斷 try{} catch(){} finally{} 執行try中的語句,若是完成,執行finally語句 若是錯誤,catch捕獲錯誤(不拋出錯誤),而後執行catch語句,再finally語句
```
操做符
typeof---主要檢測基本類型
instanceof---主要檢測引用類型 檢測對象的cunstructor
1.Object
實例 instanceof 原型
Object.getPrototypeOf() 得到對象的原型
Object.constructor 對象的構造函數
Object.hasOwnProperty( ) 檢查屬性是否被繼承
Object.isPrototypeOf(a) 一個對象是不是另外一個對象的原型 (a原型鏈上是否有Object);
Object.propertyIsEnumerable( ) 是否能夠經過for/in循環看到屬性
Object.toLocaleString( ) 返回對象的本地字符串表示
Object.toString( ) 定義一個對象的字符串表示
Object.valueOf( ) 指定對象的原始值
2.Array
Array.concat( ) 鏈接數組
Array.join( ) 將數組元素鏈接起來以構建一個字符串
Array.length 數組的大小
Array.pop( ) 刪除並返回數組的最後一個元素
Array.push( ) 給數組添加元素
Array.reverse( ) 顛倒數組中元素的順序
Array.shift( ) 將元素移出數組
Array.slice( ) 返回數組的一部分
Array.sort( ) 對數組元素進行排序
Array.splice( ) 插入、刪除或替換數組的元素
Array.toLocaleString( ) 把數組轉換成局部字符串
Array.toString( ) 將數組轉換成一個字符串
Array.unshift( ) 在數組頭部插入一個元素
Array.安全
3.Boolean
Boolean.toString( ) 將布爾值轉換成字符串
Boolean.valueOf( ) Boolean對象的布爾值
4.Function
Function.apply( ) 將函數做爲一個對象的方法調用
Function.arguments[] 傳遞給函數的參數
Function.call( ) 將函數做爲對象的方法調用
Function.caller 調用當前函數的函數
Function.length 已聲明的參數的個數
Function.prototype 對象類的原型
Function.toString( ) 把函數轉換成字符串
5.Number
Number.MAX_VALUE 最大數值
Number.MIN_VALUE 最小數值
Number.NaN 特殊的非數字值
Number.toLocaleString( ) 把數字轉換成本地格式的字符串
Number.toPrecision( ) 格式化數字的有效位
Number.toString( ) 將—個數字轉換成字符串
Number.valueOf( ) 返回原始數值
6.String(字符串對象)
String.charAt( ) 返回字符串中的第n個字符
String.charCodeAt( ) 返回字符串中的第n個字符的代碼
String.concat( ) 鏈接字符串
String.indexOf( ) 檢索字符串
String.lastIndexOf( ) 從後向前檢索一個字符串
String.length 字符串的長度
String.localeCompare( ) 用本地特定的順序來比較兩個字符串
String.slice( ) 抽取一個子串
String.split( ) 將字符串分割成字符串數組
String.substr( ) 抽取一個子串
String.substring( ) 返回字符串的一個子串
String.toLocaleLowerCase( ) 把字符串轉換小寫
String.toLocaleUpperCase( ) 將字符串轉換成大寫
String.toLowerCase( ) 將字符串轉換成小寫
String.toString( ) 返回字符串
String.toUpperCase( ) 將字符串轉換成大寫
String.valueOf( ) 返回字符串
7.其餘
parseInt(x,16/10/8) --- 若是x=08 有沒有指定radix 那就會輸出8進制
parseFloat(x,16/10/8)
isNaN()
isFinite() 檢測是否是infinity與NaN
escape() 對整個字符串進行轉義 (% ? 等在url中有意義的也會被轉義)
encodeURI() 對URL進行轉義(只會對參數) --- decode...反轉義
encodeURIComponent() 對整個url轉義(當url做爲參數時,如跳轉)閉包