zoukankan      html  css  js  c++  java
  • js mian shi ti

    8道经典JavaScript面试题解析,你真的掌握JavaScript了吗?

    https://segmentfault.com/a/1190000020026378

    『解疑』js对象obj is not iterable问题,无法使用扩展运算符展开对象解决方法,为对象定义迭代器(面试题)

    https://blog.csdn.net/DemoJx/article/details/101448171

    问题
    在给对象使用扩展运算符时,我们发现它会抛出异常 :
    TypeError: obj is not iterable
    这也是一道面试题,题目问题是这样的:

    我们能否以某种方式为下面的语句使用展开运算而不导致类型错误?

    这是报错代码示例:

    let obj = { x: 1, y: 2, z: 3 }
    console.log([...obj]) // TypeError
    1
    2
    解题知识点
    Symbol.iterator
    为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。

    Reflect.ownKeys
    静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。

    解题答案
    next 方法是迭代器iterator的一个方法
    它的返回至少有一个对象,且对象中有两个属性:value&done
    value 用于定义迭代出来的值
    done 布尔类型:
    设置true,则直接返回;不设置或者设置false,则继续走方法,类似for循环。
    下面直接给出答案:

    var obj = { x: 1, y: 2, z: 3 }
    obj[Symbol.iterator] = function() {
    return {
    next:function(){
    let objArr = Reflect.ownKeys(obj)
    if (this.index < objArr.length-1) {
    let key = objArr[this.index];
    this.index++;
    return { value: obj[key] };
    } else {
    return { done: true };
    }
    },
    index:0
    }
    }
    console.log([...obj]) // [1, 2, 3]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    参考:

    1.8道经典JavaScript面试题解析,你真的掌握JavaScript了吗?
    2.MDN-Reflect.ownKeys()
    3.MDN-Symbol.iterator
    4.ES6学习——新的语法:Symbols——Symbol.iterator
    ————————————————
    版权声明:本文为CSDN博主「DemoJx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/DemoJx/article/details/101448171

  • 相关阅读:
    IOS客户端Coding项目记录(二)
    IOS客户端Coding项目记录(一)
    IOS开发基础知识--碎片7
    图解域域树域林根域的含义
    Windows server 2012公用网络修改为专用网络
    Windows2012R2版本区别
    VMWare:vSphere6 企业版参考序列号
    Oracle快速测试连接是否成功
    Brocade300 commands
    也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)
  • 原文地址:https://www.cnblogs.com/dhjy123/p/14836654.html
Copyright © 2011-2022 走看看