〇,字符串,數值,數組的轉化html
(0)檢測數據類型git
參考鏈接:http://www.cnblogs.com/onepixel/p/5126046.htmlgithub
1,, typeof 操做符 : 能檢測到(string, undefined, number, boolean, function(函數), object(NULL,數組,對象);缺點:不管啥類型的對象,返回的都是object;使用方法: typeof a;web
2,, instanceOf 操做符 : 檢測一個對象是否爲某個構造函數的實例 ;使用方法: arr instanceof Array; arr instanceOf Function;數組
3,, isPrototypeOf 方法 : 檢測是否是該對象的原型瀏覽器
4,, toString() 是 Object 的原型方法,調用該方法,默認返回當前對象的 [[Class]] 閉包
Object.prototype.toString.call('') ; // [object String] Object.prototype.toString.call(1) ; // [object Number] Object.prototype.toString.call(true) ; // [object Boolean] Object.prototype.toString.call(Symbol()); //[object Symbol] Object.prototype.toString.call(undefined) ; // [object Undefined] Object.prototype.toString.call(null) ; // [object Null] Object.prototype.toString.call(new Function()) ; // [object Function] Object.prototype.toString.call(new Date()) ; // [object Date] Object.prototype.toString.call([]) ; // [object Array] Object.prototype.toString.call(new RegExp()) ; // [object RegExp] Object.prototype.toString.call(new Error()) ; // [object Error] Object.prototype.toString.call(document) ; // [object HTMLDocument] Object.prototype.toString.call(window) ; //[object global] window 是全局對象 global 的引用
(1)數據類型 ==》轉成 Boolean 類型函數
數據類型 | 轉換爲true的值 | 轉換爲false的值 |
Boolean | true | false |
String | 任何非空字符串 | 空字符串 |
Number | 任何非零數字值(包括無窮大) | 0和Null |
Object | 任何對象 | null |
Undefined | Undefined |
(2)數據類型 ==》轉成 Number 類型性能
數據類型 | 轉換爲Number的值 | |
Null | 0 | |
Undefined | NaN | |
String | 全數字’002‘ | 忽略前導0的數字2 |
' ' 空字符串 | 0 | |
其餘 | NaN | |
Boolean | true | 1 |
false | 0 | |
Object | 先查詢valueOf(), 而後使用toString() |
(3)數據類型 ==》轉成 String 類型this
使用 a.toString(), 或直接 String(a)
數據類型 | 轉換爲String的值 | |
Boolean | true | 'true' |
false | 'false' | |
Number | 0 | '0' |
Null | null | 'null' |
Undefined | undefined | 'undefined' |
Array | 使用toString()方法 |
(4)數據類型 ==> 轉成數組Array
數據類型 | 方法 |
String | string的方法:split() |
類數組的對象; 可遍歷的對象(Set,Map)
|
Array.from(a); |
[...a] |
(5)判斷是否爲真(在boolean上下文中轉換後的值爲真的值:truthy)
true !== Truthy
全部的值都是真值,除非被設置成false, '', null, NaN, 0, undefined
參考連接:https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy
if([]) //Truthy if({}) if(true) if(42) ……
可是{}!=false/ true/ NaN / null / undefined / 0;
[ ] ==' '; [ ]==0; [ ]==false
一,字符串
二,數值
三,函數
(1)函數定義
//函數聲明 function sum(a,b){ return a+b; } //函數表達式 var sum = function(a,b){ return a+b; } //Function構造函數【這也是一個表達式,不建議使用,影響函數解析性能】、 var sum = new Function('a', 'b', 'return a+b')
(2)匿名函數與閉包
匿名函數:沒有名字的函數
閉包:有權訪問另外一個函數做用域內的變量的函數。常見方式就是在一個函數內建立另外一個函數。
閉包特色: (1)返回函數中的變量的最後一個值(即return的值) (2)閉包函數會一直留在內存中,直至銷燬 (3)可用於建立私有變量
(3)this對象
this對象是在運行時基於函數的執行環境所決定的。
全局函數:this等於window
當函數做爲某個對象的方法被調用的時候,this等於那個對象。
四,數組
五,對象
(1)js對象分類
參考:https://juejin.im/entry/58f85f87b123db006235e938
a,本地對象:獨立於宿主環境的 ECMAScript 實現提供的對象
Object,Function,Boolean,Symbol,Array,Number,Date,String,RegExp,Map,Set,WeakMap,WeakSet,Promise,Generator,Reflect,Proxy,Error
b,內置對象:獨立與宿主環境的全部對象,在ECMAScript程序開始執行時出現」。這意味着開發者沒必要明確實例化內置對象,它已經被實例化了。內置對象都是本地對象。
Global:在web瀏覽器中,將window對象做爲global對象使用
Math
c,宿主對象:宿主環境提供的對象
包括BOM對象和DOM對象
d,自定義對象
就是開發人員本身定義的對象
六,面向對象
(1)繼承
a,基本原理:利用原型讓一個引用類型繼承另外一個引用類型的屬性和方法
b,構造函數,原型,實例的關係
參考連接: https://github.com/mqyqingfeng/Blog/issues/2
(1)prototype原型屬性 函數纔會有的屬性,prototype屬性是一個指針,指向一個叫原型的對象 (2)原型 每個js對象(除了null)在建立的時候就會有一個相關聯的對象,叫原型 (3)__proto__ 每個js對象(除了null)都有的一個屬性,叫__proto__,這個屬性指向該對象的原型 (4)constructor構造器 每一個原型都有一個constructor屬性指向關聯的構造函數
function Person(){} var person = new Person(); //下圖爲構造函數,原型,實例之間的關係
(c)原型鏈
上圖中造成了一個原型鏈,
person -------(__proto__)-------Persion.prototype-------(__proto__)--------Object.prototype
(d)原型搜索機制
當以讀取模式訪問一個實例屬性時,
首先,在實例中搜索該屬性。(搜索person實例)若沒有找到 ↓↓
其次,繼續搜索該實例的原型(搜索Person.prototype),若沒有找到 ↓↓
最後,直到搜索到原型鏈末端(搜索Object.Prototype)
(e)肯定原型與實例之間的關係
//instanceof操做符 console.log(person instanceof Person); //true,即person是Persion的實例 console.log(Person instanceof Object); //true //isPrototypeOf()方法 console.log(Person.prototype.isPrototypeOf(person)); //true,即Person.prototype是person的原型 console.log(Object.prototype.isPrototypeOf(Person)); //true
七,AJAX