零散
1、浅拷贝
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<script> /* 深浅拷贝: 数据类型 1、基本数据类型(string | boolean | undefined | number | null | symbol 2、引用数据类型 (Array | Function | Date | Object | RegExp | Error | Math) 内存 栈内存(基本数据类型,存取速度快,存放量小;引用类型地址) 堆内存(引用数据类型) 深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存(注意动态分配内存)。 当对象和他所引用的对象一起拷贝时,即发生了深拷贝。 深拷贝比浅拷贝速度且花销大 */ /* 实现浅拷贝 */ function isObject(source) { return typeof source === 'object' && source != null; } function cloneDeep(source) { if (!isObject(source)) { return source; // 非对象返回自身 } var target = Array.isArray(source) ? [] : {}; for (var key in source) { if(Object.hasOwnProperty.call(source, key)) { target[key] = cloneDeep(source[key]) } else { target[key] = source[key]; } } return target; } var obj = { title: 'hello world', info: { name: 'king', price: 32 } }; var obj2 = cloneDeep(obj); obj2.info.name = "Leonie"; obj2.info.price = '24'; console.log(JSON.stringify(obj)); console.log(JSON.stringify(obj2)); </script>
2、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<script> 'use strict'; var x = 5; let o = { x: 10, doIt: function doIt() { var x = 20; setTimeout(function () { console.log(this.x); // 严、非严格模式下也是 5 return this.x; }, 10); } }; console.log(o.doIt()); /* 函数如果没有 return 语句,则默认 return undefined; 所以 doIt() 为 undefined。 setTimeout 是宏任务,异步执行,这里的 this 指向 window【语法糖表现形式 x = window.x = this.x】,所以 x 为 5。 * */ </script>
3、视频播放速度设置:document.querySelector('video').playbackRate = 1.7