大风起兮云飞扬
大风起兮云飞扬
**深拷贝和浅拷贝的区别** 深拷贝拷贝的是目标所有 浅拷贝拷贝的是值 深拷贝拷贝前后两个值不会相互影响 浅拷贝 拷贝时 因为指向同一个指针 一旦该指针对应的值发生变化 那么统一指针的值一会发生变化 **常见的浅拷贝的应用** array.slice array.concat array.from es6的扩展运算符 object.assign 当拷贝对象的属性值为对象时 也是浅拷贝 只有一层可称之为深拷贝 **常见的深拷贝应用** jquery的$.extend JSON.parse(JSON.stringfy()) 手写递归遍历 方法如下 function deepClone(obj){ // 判断是不是 正则 日期 是不是复杂类型...
原型式继承 将传入的对象 作为创建对象的原型 实现: ``` function createObj(obj){ function F(){}; F.prototype= obj; return new F() } var obj ={ age:25, like:['唱',‘跳‘,‘rap‘] } var a1 = createObj(obj) a1.age =30 a1.like.push('篮球') var a2...
**jsonp定义** JSONP是受限于浏览器的同源策略的一种跨域问题解决方案 **原理** 利用script标签的src属性 可以不受同源策略的影响,前端需定义一个回调函数,回调函数 作为参数在请求路径中拼接 ,会将请求得到的结果传入回调之中 前端拿到结果 做相应处理 **实现** ``` function jsonp(params){ var script = document.creamentEleent('script'); var url = params.url+'?callback' = + params.callback; script.src=url; document.body.appendChild(script) } function fn(data){ console.log(data)...
JSON.stringfy()的作用:将一个json对象转化为字符串。 JSON.stringfy(value,[replacer,space])的参数说明: 第一个参数不提,后面两个参数是可选参数 replacer 作为一个函数,作用是每一个要转化的属性值都要经过这个函数,若属性值为数组 则只有数组中出现的属性才可以被转化 如果该参数为null或为提供 则 转化所有属性值,可选参数第二个表示缩进的空格 ,没有该参数 ,则代表无缩进空格 使用JSON.stringfy传入不同参数 基本数据类型: JSON.stringfy(undefined) // 返回undefined 类型undefined JSON.stringfy(Number) // 若Number.isNaN()为true 则返回undefined 否则返回 toString(number) JSON.stringfy(Boolean) // 返回true 类型string JSON.stringfy(Symbol) // 返回...
script标签有两个属性 defer 和async **defer** 并行加载脚本,在解析该 script标签时并不会阻止文档的渲染 ,defer属性的script脚本必须等到dom结构渲染完毕才可以执行。 **async** 同步加载脚本,当解析该脚本时,会将该脚本的内容解析完毕之后,再去进行dom的绘制,造成文档加载阻塞 **常见的异步加载脚本的方式** **1. 动态创建scipt标签:** ``` var script = document.creamentElement('script'); script.src='a.js' document.body.append(script) ``` **2 .XHR异步加载:** ``` var xhr =new xhrHttpRequest() xhr.open(get, 'a.js', true)...
var a=1; var a=2; var a = 3; console.log(a==1 && a==2 &&a==3);
1.celar:both; 2.父级容器设置高度; 3.父级设置overflow-hidden; 4:伪类 :before :after;
**递归实现** ``` var arr = [1,2,3,4,[5,6],7,8] funcion getFlat(list){ var newArr =[] if list===[] return false list.forEach(function(item){ Array.isArray(item)? newArr = newArr.concat(getFlat(item)): newArr = newArr.push(item) }) return newArr; } getFlat(arr) ``` **flat实现**...
非严格模式下 1.全局的this指向window 2. 函数中的this指向函数调用时所处的位置 3. 箭头函数无this指向 指向声明 4. 对象中的this,指向该对象 可以通过 new操作符 call,aplay等方式改变this指向
实现一个json.parse() 方式一 eval() 看见楼上的小姐姐提了一个eval("("+params+")"),为什么要用“()”去包裹参数,这个问题,我最初面向google搜索引擎 去研究了下 发现google不如国产百度好用,于是我面向国产百度搜索引擎去研究了下,得到的结论是,eval 接收可执行的js脚本或代码块,但不接受不可运行的js脚本作为参数"()"是让eval 把参数作为表达式去解析. 例如: ```js var json = '{"name":"蔡徐坤","age":"99“}' console.log(eval("("+ json +")")) // {"name":"蔡徐坤","age":"99“} ``` 方式二 函数 ```js var jsond = '{"name":"蔡徐坤","age":"99"}' var result =...