JavaScript
Mouse@Rice
坚持写博客,记录笔记便于复习,一点点的进步
展开
-
JavaScript 同步异步(微任务、宏任务)代码执行顺序 - 2
# 此题坑在与:await后面创建一个异步微任务,只有等到await后面的promise实例的状态是fulfilled成功之后,await后面创建的异步微任务代码才可以执行,不然就阻塞无法执行,本题await后new Promise实例的状态一直是pending状态的,所以 console.log('async1 end'); return 'async1 success'无法执行到这里。const async1 = async () => { console.log('async1');原创 2022-01-26 15:22:05 · 839 阅读 · 0 评论 -
JS的 for of 是否可以迭代普通的对象?答: 不可以,因为不具备Symbol.iterator迭代器接口规范
遍历器(Iterator)是一种机制(接口):为各种不同的数据结构提供统一的访问机制,任何数据结构只要部署Iterator接口,就可以完成遍历操作for of循环,依次处理该数据结构的所有成员拥有next方法用于依次遍历数据结构的成员每一次遍历返回的结果是一个对象 {done:false,value:xxx}done:记录是否遍历完成value:当前遍历的结果拥有Symbol.iterator属性的数据结构(值),被称为可被遍历的,可以基于for of循环处理对象默认不具备Symbol.it原创 2022-01-16 19:06:21 · 319 阅读 · 0 评论 -
es6新增数据结构Map()与WeakMap()
const obj1 = { name: 'qxl'}const obj2 = { name: 'hello'}const str = 'hello world'const mapObj = new Map()mapObj.set(obj1, 123)mapObj.set(obj2, 'lxa')mapObj.set(str, 'hello world')console.log(mapObj)Map的基本使用 另外一个新增的数据结构是Map,用于存储映射关系。 但是我们可能会想,原创 2022-01-16 17:57:38 · 396 阅读 · 0 评论 -
es6新增数据结构Set()与WeakSet()
// 在ES6之前,我们存储数据的结构主要有两种:数组、对象。// 在ES6中新增了另外两种数据结构:Set、Map,以及它们的另外形式WeakSet、WeakMap。// Set是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是元素不能重复。// 创建Set我们需要通过Set构造函数(暂时没有字面量创建的方式):// 我们可以发现Set中存放的元素是不会重复的,那么Set有一个非常常用的功能就是给数组去重。// Set常见的属性:// size:返回Set中元素的个数;原创 2022-01-16 17:27:42 · 109 阅读 · 0 评论 -
Reflect与Proxy一起使用
const obj = { name: 'qxl', age: 18}const objProxy = new Proxy(obj, { get(target, key, receiver) { console.log('get--'); return Reflect.get(target, key) }, set(target, key, newValue, receiver) { // target[ket] = newValue console.原创 2022-01-15 14:50:56 · 172 阅读 · 0 评论 -
JS监听对象的操作方式(二) Proxy()
// Proxy是es6新增的const obj = { name: '张三丰', age: 18, hobby: '打太极'}# new Proxy()参数,# obj:被代理的对象(原对象),{}:捕获器,可以监听到代理对象对属性的操作过程,获取属性值或者设置属性值、const objProxy = new Proxy(obj, { // 获取值时的捕获器 get: function(target, key) { console.log(`监听到${target}对原创 2022-01-15 11:59:22 · 1640 阅读 · 0 评论 -
JS 监听对象的操作方式(一) 监听对象的属性被设置或获取的过程Object.defineProperty()
const obj = { name: '张三丰', age: 18, hobby: '打太极'}Object.keys(obj).forEach(key => { let value = obj[key] Object.defineProperty(obj, key, { get: function() { console.log(`监听到获取${key}的值`); # 注意:如果不return值出去,默认是return undefined.原创 2022-01-15 11:05:38 · 1059 阅读 · 0 评论 -
intanceof 操作符的实现原理及实现
仅用于本人记笔记用,有不当或者不完整的地方欢迎大家多多指教!谢谢!instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。function myInstanceof(left, right) { // 获取对象的原型 let proto = Object.getPrototypeOf(left) // 获取构造函数的 prototype 对象 let prototype = right.prototype; // 判断构造函数转载 2022-01-10 23:07:56 · 262 阅读 · 0 评论 -
Object.entries()、keys()、values()、assign()、getOwnPropertySymbols()、getPrototypeOf()、setPrototype()
仅用于本人记笔记用,有不当或者不完整的地方欢迎大家多多指教!谢谢!1. Object.entries(): 会把一个对象可枚举的属性及其属性值以数组其中一项 [属性,属性值]的形式返回来,但是不会遍历原型prototype上的属性,与for in不同,for in 遍历的时候会遍历原型prototype上的属性。1.传入的是一个对象的时候const obj = {name: '张三丰', age: 18, sex: '男', hobby: '打太极'}const result = Object.en原创 2022-01-09 18:35:40 · 421 阅读 · 0 评论 -
代码输出结果专项突破(1)
结论:1. 函数不论在哪执行,它的上级上下文,一定是它的作用域,而作用域是和在哪创建的有关系。2. 所以无论函数在哪执行,遇到变量不是自己私有的,都会按照作用域链查找其上级上下文中是否有,作用域链只和在哪创建的有关系,和在哪执行是没有关系的。求输出的答案var i = 10;function A() { var i = 10; function x() { console.log(i); } return x;}var y = A();y();function B(原创 2022-01-04 22:59:46 · 78 阅读 · 0 评论 -
async await
在这里插入代码片求解答log输出的顺序async function async1() { console.log('async start') // 遇到await之后,创建一个异步的微任务,await之后的代码放到异步微任务中去。只有等到await返回来的promise实例的状态是成功(fulfilled)之后,才能执行异步微任务中的代码, await async2() // 创建一个异步微任务1,返回一个成功状态的promise实例。创建的异步微任务代码可以执行了。 console原创 2022-01-02 11:09:39 · 539 阅读 · 1 评论 -
JS循环遍历对象,获取key:value
在这里插入代码片 let obj = { 'a':'aa', 'b':'bb', 'c':'cc', 'd':'dd' }; for(let i in obj){ console.log(i); //a b c d console.log(obj[i]); // aa bb cc dd // obj[i]取对象对应键的值。}转载 2020-09-04 23:22:40 · 4737 阅读 · 0 评论 -
js 对象双层 for in 遍历取 item[key] item[key][key1]的值
项目中数据有这种 item[key] item[key][key1] 开始我比较陌生,自己没事瞎写模拟总结一下,不对的地方,请大佬多多指教。在这里插入代码片 let obj = { a: { b: { c: 1 } } } for (let key in obj) { //循环遍历obj对象的第一层 console.log(obj[key],'---',key) for (let k原创 2020-09-04 23:11:07 · 1506 阅读 · 0 评论