(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: *");
=================持续更新中====================