(1)兩種數據類型:
基本數據類型:null, undefined, number, string, Boolean
引用數據類型:Array, Object, Function, Date
(2)區別:
基本數據類型存儲在棧中,直接存值,賦值的時候是相對獨立的。css
例:`var a = 10; var b = a; b = 20; console.log(a); // 10 `
引用數據類型存儲在堆中,存的是內存地址,賦值的時候至關因而賦值內存地址html
例:`var obj1 = new Object(); var obj2 = obj1; obj2.name = "danny"; console.log(obj1.name); // danny`
(參考文章:https://www.jianshu.com/p/dee...)
A. 每一個對象都有 proto 屬性,但只有函數對象纔有 prototype 屬性,指向他的原型對象Person.prototype,原型對象(Person.prototype)是構造函數(Person)的一個實例。
Person.prototype.constructor == Personvue
B.經過new建立實例person1,實例有constructor屬性,指向他的構造函數Person。
person1.constructor == Person跨域
C. 全部的原型對象都會自動得到一個 constructor(構造函數)屬性,這個屬性(是一個指針)指向 prototype 屬性所在的函數(Person)
Person.prototype.constructor == Person數組
D. 原型鏈:JS 在建立對象(不管是普通對象仍是函數對象)的時候,都有一個叫作__proto__ 的內置屬性,用於指向建立它的構造函數的原型對象dom
let [str,arr] = ["assda1221asjdklasdjkln12klnasld",{}] for(let i in str){ if(!arr[str.charAt(i)]){ arr[str.charAt(i)] = 1 } else { arr[str.charAt(i)]++ } } let [key,number] = [null,0] for(let i in arr) { if(arr[i]>number) { key = i; number=arr[i] } } console.log(`出現次數最多的字符是${key},次數爲${number}`) //出現次數最多的字符是a,次數爲5
function add(x){ function addFake(y) { x = x + y; return addFake; }; addFake.toString = function () { return x; }; return addFake; } console.log(add(1)(2)(3)(4).toString()) //10
備註:
A. 在對函數進行console.log或者alert會自動調用toString函數,故需重寫該函數
B. 第一次調用add返回了addFake函數,後續一直調用addFake函數,故該代碼執行過程,add調用了一次,addFake調用了3次函數
使用遞歸的方法:prototype
function clone(obj) { var o = obj instanceof Array ? [] : {}; for (var k in obj) o[k] = typeof obj[k] === Object ? clone(obj[k]) : obj[k]; return o; } let obj = {name: 'danny'} const objCopy = clone(obj) obj.age = '18' console.log(obj) // {name: "danny", age: "18"} console.log(objCopy) // {name: "danny"}
備註:
一、使用JSON.parse(JSON.stringify(obj))能夠實現一些部分狀況下的深拷貝,可是若是對象中有undefined、function、symbol 會在轉換過程當中被忽略,則沒法使用
二、Object.assign只能實現淺拷貝(源對象的屬性值發現改變,則跟着變)雙向綁定
(我的部分理解)好比在函數內定義一個變量A,而後去調用這個變量A。這個時候首先在函數代碼塊裏面找是否有A,若是有就有,沒有的話繼續往外層找,直到找到window對象下面,若是還沒,那就是not defined指針
是經過Object.defineProperty()中的set()和get()函數實現的,取值的時候調用get(),賦值的時候調用get()
let keyValue = 1; let obj2 = {}; Object.defineProperty(obj2,'key', { get: function(){ return keyValue; }, set: function(newValue){ keyValue = newValue; } }); obj2.key; // 1 obj2.key = '2';
let arrData = [1,2,3,4,5,6,7,8] function randSort(arr) { for (let i = 0, len = arr.length; i < len; i++) { let rand = parseInt(Math.random()*len) let temp = arr[rand] arr[rand] = arr[i] arr[i] = temp } return arr } console.log(randSort(arrData))
參考文章:https://www.cnblogs.com/2050/...
補充:服務端處理 header("Access-Control-Allow-Origin: *");
=================持續更新中====================