这个游戏里的js读取json文件内容里面的内容怎么转成明文?

&img src=&/50/v2-8d232e1e81b4d1b7909bbdc6c31dcad4_b.png& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-8d232e1e81b4d1b7909bbdc6c31dcad4_r.png&&&p&先划重点:&b&将字符串被设置为对象属性名时,会被尝试改造为常量化版本。&/b&&/p&&p&&br&&/p&&p&老规矩先来一段 benchmark:&/p&&p&setup block:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&nx&&makeExpoStr&/span&&span class=&p&&(&/span&&span class=&nx&&str&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&kd&&var&/span& &span class=&nx&&s&/span& &span class=&o&&=&/span& &span class=&s2&&&a&&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kd&&var&/span& &span class=&nx&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span& &span class=&nx&&i&/span& &span class=&o&&&&/span& &span class=&mi&&16&/span&&span class=&p&&;&/span& &span class=&nx&&i&/span&&span class=&o&&++&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&s&/span& &span class=&o&&+=&/span& &span class=&nx&&s&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&return&/span& &span class=&nx&&s&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kd&&function&/span& &span class=&nx&&internFunc&/span&&span class=&p&&(&/span&&span class=&nx&&str&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&kd&&var&/span& &span class=&nx&&obj&/span& &span class=&o&&=&/span& &span class=&p&&{};&/span&
&span class=&nx&&obj&/span&&span class=&p&&[&/span&&span class=&nx&&str&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&keys&/span&&span class=&p&&(&/span&&span class=&nx&&obj&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&];&/span&
&span class=&p&&}&/span&
&span class=&kd&&var&/span& &span class=&nx&&flatten_1&/span& &span class=&o&&=&/span& &span class=&nx&&makeExpoStr&/span&&span class=&p&&();&/span&
&span class=&nb&&Number&/span&&span class=&p&&(&/span&&span class=&nx&&flatten_1&/span&&span class=&p&&);&/span&
&span class=&kd&&var&/span& &span class=&nx&&flatten_2&/span& &span class=&o&&=&/span& &span class=&nx&&makeExpoStr&/span&&span class=&p&&();&/span&
&span class=&nb&&Number&/span&&span class=&p&&(&/span&&span class=&nx&&flatten_2&/span&&span class=&p&&);&/span&
&span class=&kd&&var&/span& &span class=&nx&&intern_1&/span& &span class=&o&&=&/span& &span class=&nx&&makeExpoStr&/span&&span class=&p&&();&/span&
&span class=&nx&&intern_1&/span& &span class=&o&&=&/span& &span class=&nx&&internFunc&/span&&span class=&p&&(&/span&&span class=&nx&&intern_1&/span&&span class=&p&&);&/span&
&span class=&kd&&var&/span& &span class=&nx&&intern_2&/span& &span class=&o&&=&/span& &span class=&nx&&makeExpoStr&/span&&span class=&p&&();&/span&
&span class=&nx&&intern_2&/span& &span class=&o&&=&/span& &span class=&nx&&internFunc&/span&&span class=&p&&(&/span&&span class=&nx&&intern_2&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&case 1:flatten(扁平化)&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&flatten_1 === flatten_2;
&/code&&/pre&&/div&&p&case 2:intern(常量化)&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&intern_1&/span& &span class=&o&&===&/span& &span class=&nx&&intern_2&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&通过&a href=&/?target=https%3A///intern-string& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&测试&i class=&icon-external&&&/i&&/a&我们发现常量化(case #2)比扁平化(case #1)字符串比较性能快 ~10x 倍左右。&/p&&img src=&/v2-76c489426cddd084fe4ca_b.png& data-rawwidth=&651& data-rawheight=&62& class=&origin_image zh-lightbox-thumb& width=&651& data-original=&/v2-76c489426cddd084fe4ca_r.png&&&p&(条状图越长,性能越高)&/p&&blockquote&这里需要说明的是,这个性能差异会随着字符串长度而变化(越长性能差异越大)。&/blockquote&&p&要解释这个现象,先要了解字符串中很重要的一个概念,常量字符串(InternalizedString)。&/p&&p&V8 为了最佳性能与最少内存使用将某些(如字面量构造的)字符串常量化。&/p&&p&在分配常量字符串时会先计算其 &a href=&/?target=https%3A//en.wikipedia.org/wiki/Jenkins_hash_function& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jenkins's one-at-a-time hash&i class=&icon-external&&&/i&&/a& 作为 key 在 string_table 中查出 hash 相同的字符串并比较内容是否相同:&/p&&ul&&li&如相同则直接返回(不再额外分配空间)。&/li&&li&未找到(不相同)才会在老生代(数据区)中分配空间并将 key 写入 string_table。&/li&&/ul&&blockquote&V8 定义计算 hash 的最大字符串长度为 kMaxHashCalcLength = 16383,大于此长度的字符串直接使用其长度作为 hash 值(存在较大的哈希碰撞 &a href=&/?target=https%3A//en.wikipedia.org/wiki/Collision_%28computer_science%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hash-collision&i class=&icon-external&&&/i&&/a& 风险)。&/blockquote&&p&hash 相同不代表字符串(内容)相同,需对其内容进行比较后才能最终确定。但 hash 不同的字符串内容肯定不同,所以&b&在比较两个已计算 hash 的字符串是否相等时,可以以 hash 不相等作为快速负检查&/b&(Fast negative check)。&/p&&blockquote&StringTable 继承于 HashTable,实例 string_table 可理解为字符串的常量池。&/blockquote&&p&综上所述,&b&内容相同的常量字符串具有相同的引用(共享同一块老生代空间),在比较时直接比较引用(指针)是否相等即可 。&/b&&/p&&blockquote&V8 规定常量字符串一定分配在老生代(data space)数据区空间。&/blockquote&&p&我们来看个例子:&/p&&img src=&/v2-1c17a6c62cab6e7a7a7da71adc330b46_b.png& data-rawwidth=&1012& data-rawheight=&418& class=&origin_image zh-lightbox-thumb& width=&1012& data-original=&/v2-1c17a6c62cab6e7a7a7da71adc330b46_r.png&&&ul&&li&以字面量构造的字符串 #hello 、#world 为常量字符串。&/li&&li&b 由于赋值的缘故它与 a 有着相同的引用。&/li&&li&c 与 d 均不是常量字符串。&/li&&li&两个(常量字符串) #world 也拥有相同的引用。&/li&&/ul&&blockquote&在 V8 日志中,常量字符串以 # 号作为其前缀标识。&/blockquote&&p&在开发调试过程中,可以调用 V8 的 Runtime Call (%InternalizeString)来常量化字符串,如下所示:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&c1&&// flags: --allow-natives-syntax&/span&
&span class=&kd&&var&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&s2&&&hello&&/span& &span class=&o&&+&/span& &span class=&s2&&&world&&/span&&span class=&p&&;&/span&
&span class=&c1&&// a = &ConsString&&/span&
&span class=&kd&&var&/span& &span class=&nx&&b&/span& &span class=&o&&=&/span& &span class=&o&&%&/span&&span class=&nx&&InternalizeString&/span&&span class=&p&&(&/span&&span class=&nx&&a&/span&&span class=&p&&);&/span&
&span class=&c1&&// b = &SeqOneByteString&, Internalized&/span&
&span class=&c1&&// a = &ThinString&, Internalized&/span&
&/code&&/pre&&/div&&p&而在运营环境中,&b&当字符串被设置为对象属性名时会被尝试改造为常量化版本&/b&,如下所示:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&s2&&&hello&&/span& &span class=&o&&+&/span& &span class=&s2&&&world&&/span&&span class=&p&&;&/span&
&span class=&c1&&// a = &ConsString&&/span&
&span class=&kd&&var&/span& &span class=&nx&&obj&/span& &span class=&o&&=&/span& &span class=&p&&{};&/span&
&span class=&nx&&obj&/span&&span class=&p&&[&/span&&span class=&nx&&a&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&c1&&// es2015: {[a] : true}&/span&
&span class=&kd&&var&/span& &span class=&nx&&b&/span& &span class=&o&&=&/span& &span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&keys&/span&&span class=&p&&(&/span&&span class=&nx&&obj&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&];&/span&
&span class=&c1&&// b = &SeqOneByteString&, Internalized&/span&
&span class=&c1&&// a = &ThinString&, Internalized&/span&
&/code&&/pre&&/div&&p&为什么通过上述两(qi)种(ji)操(yin)作(qiao)可以常量化字符串了?&/p&&p&我们要先从 Runtime Call (%InternalizeString) 说起,在 V8 内部其实是直接调用了 v8::internal::Factory::InternalizeString 方法,但这方法的 namespace 为 v8::internal 无法直接在外部(包括 JavaScript 与 外部 C++ 代码)进行调用。&/p&&p&虽然我们不能直接进行调用,但是&b&我们可以通过一些方法的 side effects 来隐式调用,而将字符串被设置为对象属性名就是运用了这个技术。&/b&&/p&&img src=&/v2-d5dbdd09c010a49b4950a3_b.png& data-rawwidth=&1194& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&1194& data-original=&/v2-d5dbdd09c010a49b4950a3_r.png&&&p&在 V8 中有如上图的途径可以隐式调用到 InternalizeString 方法,而我们的奇技淫巧也正是利用了这条通路。&/p&&p&根据 ECMA-262 标准,在设置对象属性名时,V8 会调用 TryConvertKey 尝试将传入类型转换为字符串类型,并调用 InternalizeString 将其常量化。&/p&&p&InternalizeString 方法中的查找过程已在文章开头介绍过,而将常量化过程的实现如下:&/p&&ul&&li&在老生代(data space)空间中分配一个 SeqString 实例(b)将字符内容拷入。&/li&&li&新分配的 SeqString 实例(b)&Map& 中的 instance_type 加上 kInternalizedTag 标记,标识为常量字符串。&/li&&li&用 ThinString&Map& 替换原实例(a)的 &Map&,actual 字段引用新分配的 SeqString 实例(b)。&/li&&li&最后根据 ThinString 的大小调整原实例(a)在堆内的大小。&/li&&/ul&&blockquote&我们在&a href=&/p/& class=&internal&&《奇技淫巧学 V8 之二,对象在 V8 内的表达》&/a&中提到:每个在堆内创建的实例均有一个描述其结构的 &Map& 。&br&也就是说,当实例的 &Map& 发生变更时,实例的类型也会随之改变。&/blockquote&&p&最终形成如下图所示的结构:&/p&&img src=&/v2-2c0fb52affe300d181d5_b.png& data-rawwidth=&1162& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&1162& data-original=&/v2-2c0fb52affe300d181d5_r.png&&&blockquote&由于常量字符串(新生代)与非常量字符串(老生代)所在的分代不同,故不能直接将原实例(a)就地(in-place)常量化。&/blockquote&&p&&b&V8 通过将字符串实例类型转换为 ThinString 并引用常量字符串来实现隐式就地转换。&/b&&/p&&p&我们在&a href=&/p/& class=&internal&&《奇技淫巧学 V8 之六,字符串在 V8 内的表达》&/a&中提到:多数情况下可认为 ThinString 与 one-part ConsString(actual, empty_string) 在内存布局与算法逻辑上是等价的。&/p&&p&故未启用 ThinString 类型支持时,根据原始字符串的不同表达 V8 会有不同的处理方案:&/p&&p&&br&&/p&&p&1、原始字符串为存储类型表达(如:SeqString)时:&/p&&img src=&/v2-579f7c6b65dd4c62ea5d_b.png& data-rawwidth=&1160& data-rawheight=&383& class=&origin_image zh-lightbox-thumb& width=&1160& data-original=&/v2-579f7c6b65dd4c62ea5d_r.png&&&p&由于缺少 ThinString 的支持(再加上处于不同的分代)无法实现就地常量化,故:&/p&&ul&&li&SeqString 实例 #0(a)并没有发生任何变化,仍然是非常量字符串。&/li&&li&常量字符串必须从对象 obj 的 keys 中取出,也就是(新创建的)实例 #3 (b)。&/li&&/ul&&blockquote&文章开头 benchmark 中的 internFunc 基于兼容性考量,使用了从对象 keys 中取出的常量化版本(b),如果在支持(开启) --thin_strings 的 V8 版本中运行,也可直接使用就地转换的版本(而不需要重新赋值)。&/blockquote&&p&用(JavaScript)伪代码来表达:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&c1&&// pseudocode&/span&
&span class=&kd&&var&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&s2&&&hello&&/span& &span class=&o&&+&/span& &span class=&s2&&&world&&/span&&span class=&p&&;&/span&
&span class=&c1&&// ONE_BYTE_STRING_TYPE&/span&
&span class=&kd&&var&/span& &span class=&nx&&obj&/span& &span class=&o&&=&/span& &span class=&p&&{};&/span&
&span class=&nx&&obj&/span&&span class=&p&&[&/span&&span class=&nx&&a&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&nx&&FLAG_thin_strings&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&c1&&// in-place internalization&/span&
&span class=&k&&return&/span& &span class=&nx&&a&/span&&span class=&p&&;&/span&
&span class=&c1&&// THIN_ONE_BYTE_STRING_TYPE&/span&
&span class=&p&&}&/span& &span class=&k&&else&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&keys&/span&&span class=&p&&(&/span&&span class=&nx&&obj&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&];&/span&
&span class=&c1&&// ONE_BYTE_INTERNALIZED_STRING_TYPE&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&2、原始字符串为引用类型表达(如:ConsString)时:&/p&&img src=&/v2-6cfda73bd5e3_b.png& data-rawwidth=&1185& data-rawheight=&574& class=&origin_image zh-lightbox-thumb& width=&1185& data-original=&/v2-6cfda73bd5e3_r.png&&&p&由于缺少 ThinString 的支持,V8 会利用 one-part ConsString 引用特性来实现隐式就地转换:&/p&&ul&&li&在老生代中分配常量字符串 SeqString 实例 #3(b)。&/li&&li&对 ConsString 实例 #0(a)中的 first 与 second 字段重新赋值:&/li&&ul&&li&first 引用常量字符串 SeqString 实例 #3(b)。&/li&&li&second 引用堆内 empty_string 实例。&/li&&li&这样结构的 ConsString 也可被认为是常量化字符串。&/li&&/ul&&/ul&&blockquote&但毕竟 ConsString 是用来表达拼接后的字符串,故在新版本(V8>5.8)中引入了 ThinString 类型,专门用于处理类似场景。&/blockquote&&p&用(JavaScript)伪代码来表达:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&c1&&// pseudocode&/span&
&span class=&kd&&var&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&s2&&&I am&&/span& &span class=&o&&+&/span& &span class=&s2&&&superzheng&&/span&&span class=&p&&;&/span&
&span class=&c1&&// CONS_ONE_BYTE_STRING_TYPE&/span&
&span class=&kd&&var&/span& &span class=&nx&&obj&/span& &span class=&o&&=&/span& &span class=&p&&{};&/span&
&span class=&nx&&obj&/span&&span class=&p&&[&/span&&span class=&nx&&a&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&c1&&// in-place internalization&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&nx&&FLAG_thin_strings&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&nx&&a&/span&&span class=&p&&;&/span&
&span class=&c1&&// THIN_ONE_BYTE_STRING_TYPE&/span&
&span class=&p&&}&/span& &span class=&k&&else&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&nx&&a&/span&&span class=&p&&;&/span&
&span class=&c1&&// CONS_ONE_BYTE_STRING_TYPE&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&总结一下:&/p&&ul&&li&内容相同的常量字符串具有相同的引用(共享同一块老生代空间),在比较时直接比较引用(指针)是否相等即可,故拥有 O(1) 的比较性能。&/li&&li&&b&将字符串被设置为对象属性名时,会被尝试改造为常量化版本。&/b&&/li&&li&V8 通过将字符串实例类型转换为 ThinString 并引用常量字符串来实现隐式就地转换。&/li&&li&当缺少 ThinString 支持并且原始字符串又为引用类型表达时,会使用 ConsString(actual, empty_string) 来实现隐式就地转换。&/li&&/ul&&p&&br&&/p&&p&至此,奇技淫巧学 V8 字符串(String)部分全部结束了,章节列表如下:&/p&&ul&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之六,字符串在 V8 内的表达&/a&&/li&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之七,字符串的扁平化&/a&&/li&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之八,常量字符串&/a&&/li&&/ul&&p&&br&&/p&&p&奇技淫巧学 V8 对象(JSObject)部分章节:&/p&&ul&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之一,对象访问模式优化&/a&&/li&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之二,对象在 V8 内的表达&/a&&/li&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之三,多态内联缓存 PICs&/a&&/li&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之四,迁移对象至快速模式&/a&&/li&&li&&a href=&/p/& class=&internal&&奇技淫巧学 V8 之五,对象属性的快速删除&/a&&/li&&/ul&
先划重点:将字符串被设置为对象属性名时,会被尝试改造为常量化版本。 老规矩先来一段 benchmark:setup block:function makeExpoStr(str) {
var s = "a";
for (var i = 0; i & 16; i++) {
function internFunc(str) {
&p&9.11日更新:有同学反馈说试题偏向对API使用和API细节。确实存在这样的情况,所以将来有机会会补充一些实战方面的题目,但基础也需要保留&/p&&p&--------------------&/p&&p&这份试卷我并没有准备答案,一方面所有的代码可以立即在浏览器中执行看到(我)效(很)果(懒);另一方面这也并非是一场真的(我)考(很)试(懒),而是用于检测自己ES6知识并且查漏补缺,所以不必有太大压力。&/p&&p&这份试卷的内容主要来源于两份我学习ES6的资料:nzakas(JavaScript高级程序设计的作者)的开源图书&a href=&/?target=https%3A///nzakas/understandinges6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&understandinges6&i class=&icon-external&&&/i&&/a&,以及Nicolás Bevacqua的&a href=&/?target=https%3A///articles/tagged/es6-in-depth& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ES6 in Depth&i class=&icon-external&&&/i&&/a&系列。如果你对文中的一些问题有疑惑,你一定可以从它们中找到答案&/p&&p&这份试卷难免会有纰漏或者不严谨的地方,比如没有正确答案或者答案不唯一,如果有出现这样的情况,请留言给我让我及时纠正。&/p&&p&最后,如果你有兴趣的话可以把你认为的正确答案或者解释写在留言中供大家参考&/p&&h2&选择题(有一个或多个答案)&/h2&&ul&&li&以下关于...rest参数说法错误的是&/li&&ul&&li&函数只能有一个...rest参数&/li&&li&...rest参数后允许再接其他参数&/li&&li&对象的方法不能有...rest参数&/li&&li&rest参数不影响arguments对象,arguments反映的还是实际传参(长度,索引等)&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&以下关于 weakset 说法错误的是&/li&&ul&&li&调用add方法时传递的必须是object数据类型&/li&&li&可以通过 for of 进行遍历&/li&&li&没有 keys 和 values 方法&/li&&li&没有 size 属性&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&以下关于 Symbol 说法正确的是&/li&&ul&&li&Symbol 不是基础数据类型(primative type)&/li&&li&Symbol 数据类型可以转化为字符串或者数字&/li&&li&必须使用 new 关键字创建 Symbol 数据类型&/li&&li&以上说法全是错误&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&关于 module 以下说法错误的是&/li&&ul&&li&import 命令使用的是解构(Destructuring)语法&/li&&li&一个模块只能导出一个 default value&/li&&li&在引入defaut值和非default值时,default值必须放在前面&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&以下关于super()方法说法正确的是&/li&&ul&&li&在使用this关键字之前必须调用super()方法&/li&&li&只能在子类中调用super()函数&/li&&li&如果你在子类中定义了构造函数,你必须调用super()方法&/li&&li&如果你没有指定构造函数,super()方法也会自动为你调用&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&关于迭代器(iterator)以下说法正确的是&/li&&ul&&li&map[Symbol.iterator] === map.entries结果返回 true&/li&&li&可以通过 Symbol.iterator 来访问变量的默认迭代器&/li&&li&arrays 和 sets 默认的迭代器是 values&/li&&li&weakmap 和 weakset 没有默认的迭代器&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&以下代码不会报错的是&/li&&ul&&li&Object.assign([1, 2, 3], [4, 5])&/li&&li&var foo = 'bar'; var baz = { [foo] };&/li&&li&map[Symbol.iterator] === map.entries&/li&&li&let person = new class { //... }(&Nicholas&);&/li&&/ul&&/ul&&p&&br&&/p&&h2&请说出以下每一段代码的执行结果,或者是否会报错&/h2&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&kc&&true&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&temp&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&k&&typeof&/span& &span class=&nx&&temp&/span&&span class=&p&&);&/span&
&span class=&kr&&const&/span& &span class=&nx&&temp&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&message&/span& &span class=&o&&=&/span& &span class=&sb&&`Multiline&/span&
&span class=&sb&&
string`&/span&&span class=&p&&;&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&message&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&].&/span&&span class=&nx&&map&/span&&span class=&p&&(&/span&&span class=&nx&&n&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span& &span class=&nx&&number&/span&&span class=&o&&:&/span& &span class=&nx&&n&/span& &span class=&p&&})&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&nx&&mixArgs&/span&&span class=&p&&(&/span&&span class=&nx&&first&/span&&span class=&p&&,&/span& &span class=&nx&&second&/span& &span class=&o&&=&/span& &span class=&s2&&&b&&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&arguments&/span&&span class=&p&&.&/span&&span class=&nx&&length&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&first&/span& &span class=&o&&===&/span& &span class=&nx&&arguments&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&second&/span& &span class=&o&&===&/span& &span class=&nx&&arguments&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]);&/span&
&span class=&p&&}&/span&
&span class=&nx&&mixArgs&/span&&span class=&p&&();&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&b&/span&&span class=&o&&:&/span& &span class=&s1&&'c'&/span&&span class=&p&&}&/span&
&span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&defineProperty&/span&&span class=&p&&(&/span&&span class=&nx&&a&/span&&span class=&p&&,&/span& &span class=&s1&&'visible'&/span&&span class=&p&&,&/span& &span class=&p&&{&/span& &span class=&nx&&enumerable&/span&&span class=&o&&:&/span& &span class=&kc&&false&/span&&span class=&p&&,&/span& &span class=&nx&&value&/span&&span class=&o&&:&/span& &span class=&s1&&'boo! ahhh!'&/span& &span class=&p&&})&/span&
&span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&assign&/span&&span class=&p&&({},&/span& &span class=&nx&&a&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&p&&[[&/span&&span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&],&/span& &span class=&p&&[&/span&&span class=&mi&&3&/span&&span class=&p&&]];&/span&
&span class=&kd&&var&/span& &span class=&nx&&b&/span& &span class=&o&&=&/span& &span class=&p&&[...&/span&&span class=&nx&&a&/span&&span class=&p&&];&/span&
&span class=&nx&&b&/span&&span class=&p&&.&/span&&span class=&nx&&shift&/span&&span class=&p&&().&/span&&span class=&nx&&shift&/span&&span class=&p&&();&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&a&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&obj1&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&a&/span&&span class=&o&&:&/span& &span class=&mi&&0&/span& &span class=&p&&,&/span& &span class=&nx&&b&/span&&span class=&o&&:&/span& &span class=&p&&{&/span& &span class=&nx&&c&/span&&span class=&o&&:&/span& &span class=&mi&&0&/span&&span class=&p&&}};&/span&
&span class=&kd&&let&/span& &span class=&nx&&obj2&/span& &span class=&o&&=&/span& &span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&assign&/span&&span class=&p&&({},&/span& &span class=&nx&&obj1&/span&&span class=&p&&);&/span&
&span class=&nx&&obj1&/span&&span class=&p&&.&/span&&span class=&nx&&b&/span&&span class=&p&&.&/span&&span class=&nx&&c&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&JSON&/span&&span class=&p&&.&/span&&span class=&nx&&stringify&/span&&span class=&p&&(&/span&&span class=&nx&&obj2&/span&&span class=&p&&))&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&x&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&a&/span&&span class=&o&&:&/span& &span class=&p&&{&/span& &span class=&nx&&a&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span& &span class=&p&&}&/span& &span class=&p&&};&/span&
&span class=&kr&&const&/span& &span class=&nx&&y&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&a&/span&&span class=&o&&:&/span& &span class=&p&&{&/span& &span class=&nx&&b&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span& &span class=&p&&}&/span& &span class=&p&&};&/span&
&span class=&kr&&const&/span& &span class=&nx&&z&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&p&&...&/span&&span class=&nx&&x&/span&&span class=&p&&,&/span& &span class=&p&&...&/span&&span class=&nx&&y&/span& &span class=&p&&};&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&z&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&obj&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&a&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span&
&span class=&nx&&c&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span&
&span class=&mi&&2&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span&
&span class=&nx&&b&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span&
&span class=&mi&&1&/span&&span class=&o&&:&/span& &span class=&mi&&1&/span&
&span class=&p&&};&/span&
&span class=&nx&&obj&/span&&span class=&p&&.&/span&&span class=&nx&&d&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&getOwnPropertyNames&/span&&span class=&p&&(&/span&&span class=&nx&&obj&/span&&span class=&p&&).&/span&&span class=&nx&&join&/span&&span class=&p&&(&/span&&span class=&s2&&&&&/span&&span class=&p&&));&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&node&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&type&/span&&span class=&o&&:&/span& &span class=&s2&&&Identifier&&/span&
&span class=&p&&};&/span&
&span class=&kd&&let&/span& &span class=&p&&{&/span& &span class=&nx&&type&/span&&span class=&o&&:&/span& &span class=&nx&&localType&/span& &span class=&o&&=&/span& &span class=&s1&&'foo'&/span&&span class=&p&&,&/span& &span class=&nx&&name&/span&&span class=&o&&:&/span& &span class=&nx&&localName&/span& &span class=&o&&=&/span& &span class=&s1&&'bar'&/span& &span class=&p&&}&/span& &span class=&o&&=&/span& &span class=&nx&&node&/span&&span class=&p&&;&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&localType&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&localName&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&node&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&type&/span&&span class=&o&&:&/span& &span class=&s2&&&Identifier&&/span&&span class=&p&&,&/span&
&span class=&nx&&name&/span&&span class=&o&&:&/span& &span class=&s2&&&foo&&/span&
&span class=&p&&},&/span&
&span class=&nx&&type&/span& &span class=&o&&=&/span& &span class=&s2&&&Literal&&/span&&span class=&p&&,&/span&
&span class=&nx&&name&/span& &span class=&o&&=&/span& &span class=&mi&&5&/span&&span class=&p&&;&/span&
&span class=&p&&({&/span& &span class=&nx&&type&/span&&span class=&p&&,&/span& &span class=&nx&&name&/span& &span class=&p&&}&/span& &span class=&o&&=&/span& &span class=&nx&&node&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&type&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&name&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span&
&span class=&nx&&b&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&p&&[&/span& &span class=&nx&&a&/span&&span class=&p&&,&/span& &span class=&nx&&b&/span& &span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&p&&[&/span& &span class=&nx&&b&/span&&span class=&p&&,&/span& &span class=&nx&&a&/span& &span class=&p&&];&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&a&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&b&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&p&&{&/span&&span class=&nx&&foo&/span&&span class=&o&&=&/span&&span class=&mi&&3&/span&&span class=&p&&}&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&foo&/span&&span class=&o&&:&/span& &span class=&mi&&2&/span& &span class=&p&&}&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&foo&/span&&span class=&p&&)&/span&
&span class=&kd&&var&/span& &span class=&p&&{&/span&&span class=&nx&&foo&/span&&span class=&o&&=&/span&&span class=&mi&&3&/span&&span class=&p&&}&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&foo&/span&&span class=&o&&:&/span& &span class=&kc&&undefined&/span& &span class=&p&&}&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&foo&/span&&span class=&p&&)&/span&
&span class=&kd&&var&/span& &span class=&p&&{&/span&&span class=&nx&&foo&/span&&span class=&o&&=&/span&&span class=&mi&&3&/span&&span class=&p&&}&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&nx&&bar&/span&&span class=&o&&:&/span& &span class=&mi&&2&/span& &span class=&p&&}&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&foo&/span&&span class=&p&&)&/span&
&span class=&kd&&var&/span& &span class=&p&&[&/span&&span class=&nx&&b&/span&&span class=&o&&=&/span&&span class=&mi&&10&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&kc&&undefined&/span&&span class=&p&&]&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&b&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&uid3&/span& &span class=&o&&=&/span& &span class=&nx&&Symbol&/span&&span class=&p&&(&/span&&span class=&s2&&&uid&&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&Symbol&/span&&span class=&p&&.&/span&&span class=&nx&&keyFor&/span&&span class=&p&&(&/span&&span class=&nx&&uid3&/span&&span class=&p&&));&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&nx&&MyObject&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&c1&&// ...&/span&
&span class=&p&&}&/span&
&span class=&nb&&Object&/span&&span class=&p&&.&/span&&span class=&nx&&defineProperty&/span&&span class=&p&&(&/span&&span class=&nx&&MyObject&/span&&span class=&p&&,&/span& &span class=&nx&&Symbol&/span&&span class=&p&&.&/span&&span class=&nx&&hasInstance&/span&&span class=&p&&,&/span& &span class=&p&&{&/span&
&span class=&nx&&value&/span&&span class=&o&&:&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&v&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&});&/span&
&span class=&kd&&let&/span& &span class=&nx&&obj&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&MyObject&/span&&span class=&p&&();&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&obj&/span& &span class=&k&&instanceof&/span& &span class=&nx&&MyObject&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&set&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Set&/span&&span class=&p&&([&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&]);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&set&/span&&span class=&p&&.&/span&&span class=&nx&&size&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&map&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Map&/span&&span class=&p&&()&/span&
&span class=&nx&&map&/span&&span class=&p&&.&/span&&span class=&nx&&set&/span&&span class=&p&&(&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span& &span class=&s1&&'a'&/span&&span class=&p&&)&/span&
&span class=&nx&&map&/span&&span class=&p&&.&/span&&span class=&nx&&set&/span&&span class=&p&&(&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span& &span class=&s1&&'b'&/span&&span class=&p&&)&/span&
&span class=&nx&&map&/span&&span class=&p&&.&/span&&span class=&nx&&set&/span&&span class=&p&&(&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span& &span class=&s1&&'c'&/span&&span class=&p&&)&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&([...&/span&&span class=&nx&&map&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&map&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Map&/span&&span class=&p&&([[&/span&&span class=&kc&&NaN&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&p&&[&/span&&span class=&nx&&Symbol&/span&&span class=&p&&(),&/span& &span class=&mi&&2&/span&&span class=&p&&],&/span& &span class=&p&&[&/span&&span class=&s1&&'foo'&/span&&span class=&p&&,&/span& &span class=&s1&&'bar'&/span&&span class=&p&&]])&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&map&/span&&span class=&p&&.&/span&&span class=&nx&&has&/span&&span class=&p&&(&/span&&span class=&kc&&NaN&/span&&span class=&p&&))&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&map&/span&&span class=&p&&.&/span&&span class=&nx&&has&/span&&span class=&p&&(&/span&&span class=&nx&&Symbol&/span&&span class=&p&&()))&/span&
&span class=&kd&&var&/span& &span class=&nx&&sym&/span& &span class=&o&&=&/span& &span class=&nx&&Symbol&/span&&span class=&p&&()&/span&
&span class=&kd&&var&/span& &span class=&nx&&map&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Map&/span&&span class=&p&&([[&/span&&span class=&kc&&NaN&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&p&&[&/span&&span class=&nx&&sym&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&],&/span& &span class=&p&&[&/span&&span class=&s1&&'foo'&/span&&span class=&p&&,&/span& &span class=&s1&&'bar'&/span&&span class=&p&&]])&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&map&/span&&span class=&p&&.&/span&&span class=&nx&&has&/span&&span class=&p&&(&/span&&span class=&nx&&sym&/span&&span class=&p&&))&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span&&span class=&o&&*&/span& &span class=&nx&&generator&/span& &span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&k&&yield&/span& &span class=&s1&&'p'&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s1&&'o'&/span&&span class=&p&&)&/span&
&span class=&k&&yield&/span& &span class=&s1&&'n'&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s1&&'y'&/span&&span class=&p&&)&/span&
&span class=&k&&yield&/span& &span class=&s1&&'f'&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s1&&'o'&/span&&span class=&p&&)&/span&
&span class=&k&&yield&/span& &span class=&s1&&'o'&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s1&&'!'&/span&&span class=&p&&)&/span&
&span class=&p&&}&/span&
&span class=&kd&&var&/span& &span class=&nx&&foo&/span& &span class=&o&&=&/span& &span class=&nx&&generator&/span&&span class=&p&&()&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kd&&let&/span& &span class=&nx&&pony&/span& &span class=&k&&of&/span& &span class=&nx&&foo&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&pony&/span&&span class=&p&&)&/span&
&span class=&p&&}&/span&
&span class=&kd&&var&/span& &span class=&nx&&foo&/span& &span class=&o&&=&/span& &span class=&nx&&generator&/span&&span class=&p&&()&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&([...&/span&&span class=&nx&&foo&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&o&&*&/span&&span class=&nx&&gen&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&k&&yield&/span& &span class=&mi&&5&/span& &span class=&o&&+&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&const&/span& &span class=&nx&&g&/span& &span class=&o&&=&/span& &span class=&nx&&gen&/span&&span class=&p&&();&/span&
&span class=&nx&&g&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&o&&*&/span&&span class=&nx&&createIterator&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&kd&&let&/span& &span class=&nx&&first&/span& &span class=&o&&=&/span& &span class=&k&&yield&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&kd&&let&/span& &span class=&nx&&second&/span& &span class=&o&&=&/span& &span class=&k&&yield&/span& &span class=&nx&&first&/span& &span class=&o&&+&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&k&&yield&/span& &span class=&nx&&second&/span& &span class=&o&&+&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kd&&let&/span& &span class=&nx&&iterator&/span& &span class=&o&&=&/span& &span class=&nx&&createIterator&/span&&span class=&p&&();&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&iterator&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&());&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&iterator&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&));&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&iterator&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&));&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&iterator&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&());&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&o&&*&/span&&span class=&nx&&createIterator&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&k&&yield&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span&&span class=&p&&;&/span&
&span class=&k&&yield&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&k&&yield&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kd&&let&/span& &span class=&nx&&iterator&/span& &span class=&o&&=&/span& &span class=&nx&&createIterator&/span&&span class=&p&&();&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&iterator&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&());&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&iterator&/span&&span class=&p&&.&/span&&span class=&nx&&next&/span&&span class=&p&&());&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&PersonClass&/span& &span class=&o&&=&/span& &span class=&kr&&class&/span& &span class=&nx&&PersonClass2&/span& &span class=&p&&{&/span&
&span class=&c1&&//...&/span&
&span class=&p&&};&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&k&&typeof&/span& &span class=&nx&&PersonClass&/span&&span class=&p&&)&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&k&&typeof&/span& &span class=&nx&&PersonClass2&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&propertyName&/span& &span class=&o&&=&/span& &span class=&s1&&'sayHi'&/span&&span class=&p&&;&/span&
&span class=&kr&&class&/span& &span class=&nx&&Test&/span& &span class=&p&&{&/span&
&span class=&p&&[&/span&&span class=&nx&&propertyName&/span&&span class=&p&&]()&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s1&&'Hello World'&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&kr&&const&/span& &span class=&nx&&test&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Test&/span&&span class=&p&&();&/span&
&span class=&nx&&test&/span&&span class=&p&&.&/span&&span class=&nx&&sayHi&/span&&span class=&p&&();&/span&
&span class=&nx&&test&/span&&span class=&p&&[&/span&&span class=&nx&&propertyName&/span&&span class=&p&&]();&/span&
&span class=&nx&&propertyName&/span& &span class=&o&&=&/span& &span class=&s1&&'sayBye'&/span&&span class=&p&&;&/span&
&span class=&kr&&const&/span& &span class=&nx&&test2&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Test&/span&&span class=&p&&();&/span&
&span class=&nx&&test&/span&&span class=&p&&.&/span&&span class=&nx&&sayHi&/span&&span class=&p&&();&/span&
&span class=&nx&&test&/span&&span class=&p&&[&/span&&span class=&nx&&propertyName&/span&&span class=&p&&]();&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&promise&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nb&&Promise&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&resolve&/span&&span class=&p&&,&/span& &span class=&nx&&reject&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s2&&&Promise&&/span&&span class=&p&&);&/span&
&span class=&nx&&resolve&/span&&span class=&p&&();&/span&
&span class=&p&&});&/span&
&span class=&nx&&promise&/span&&span class=&p&&.&/span&&span class=&nx&&then&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s2&&&Resolved.&&/span&&span class=&p&&);&/span&
&span class=&p&&});&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&s2&&&Hi!&&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&p1&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nb&&Promise&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&resolve&/span&&span class=&p&&,&/span& &span class=&nx&&reject&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&resolve&/span&&span class=&p&&(&/span&&span class=&mi&&42&/span&&span class=&p&&);&/span&
&span class=&p&&});&/span&
&span class=&kd&&let&/span& &span class=&nx&&p2&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nb&&Promise&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&resolve&/span&&span class=&p&&,&/span& &span class=&nx&&reject&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&resolve&/span&&span class=&p&&(&/span&&span class=&mi&&43&/span&&span class=&p&&);&/span&
&span class=&p&&});&/span&
&span class=&nx&&p1&/span&&span class=&p&&.&/span&&span class=&nx&&then&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&value&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&value&/span&&span class=&p&&);&/span&
&span class=&k&&return&/span& &span class=&nx&&p2&/span&&span class=&p&&;&/span&
&span class=&p&&}).&/span&&span class=&nx&&then&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&value&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&value&/span&&span class=&p&&);&/span&
&span class=&p&&});&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&c1&&// example.js:&/span&
&span class=&kr&&export&/span& &span class=&kd&&var&/span& &span class=&nx&&name&/span& &span class=&o&&=&/span& &span class=&s2&&&Nicholas&&/span&&span class=&p&&;&/span&
&span class=&kr&&export&/span& &span class=&kd&&function&/span& &span class=&nx&&setName&/span&&span class=&p&&(&/span&&span class=&nx&&newName&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&name&/span& &span class=&o&&=&/span& &span class=&nx&&newName&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&c1&&// another_example.js:&/span&
&span class=&kr&&import&/span& &span class=&p&&{&/span& &span class=&nx&&name&/span&&span class=&p&&,&/span& &span class=&nx&&setName&/span& &span class=&p&&}&/span& &span class=&nx&&from&/span& &span class=&s2&&&./example.js&&/span&&span class=&p&&;&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&name&/span&&span class=&p&&);&/span&
&span class=&nx&&setName&/span&&span class=&p&&(&/span&&span class=&s2&&&Greg&&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&name&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&target&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&name&/span&&span class=&o&&:&/span& &span class=&s2&&&target&&/span&
&span class=&p&&};&/span&
&span class=&kd&&let&/span& &span class=&p&&{&/span& &span class=&nx&&proxy&/span&&span class=&p&&,&/span& &span class=&nx&&revoke&/span& &span class=&p&&}&/span& &span class=&o&&=&/span& &span class=&nb&&Proxy&/span&&span class=&p&&.&/span&&span class=&nx&&revocable&/span&&span class=&p&&(&/span&&span class=&nx&&target&/span&&span class=&p&&,&/span& &span class=&p&&{});&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&proxy&/span&&span class=&p&&.&/span&&span class=&nx&&name&/span&&span class=&p&&);&/span&
&span class=&nx&&revoke&/span&&span class=&p&&();&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&proxy&/span&&span class=&p&&.&/span&&span class=&nx&&name&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&let&/span& &span class=&nx&&ints&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Int16Array&/span&&span class=&p&&([&/span&&span class=&mi&&25&/span&&span class=&p&&,&/span& &span class=&mi&&50&/span&&span class=&p&&]);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&ints&/span&&span class=&p&&.&/span&&span class=&nx&&length&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&ints&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&ints&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]);&/span&
&span class=&nx&&ints&/span&&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&mi&&5&/span&&span class=&p&&;&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&ints&/span&&span class=&p&&.&/span&&span class=&nx&&length&/span&&span class=&p&&);&/span&
&span class=&nx&&console&/span&&span class=&p&&.&/span&&span class=&nx&&log&/span&&span class=&p&&(&/span&&span class=&nx&&ints&/span&&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&]);&/span&
&/code&&/pre&&/div&&h2&问答题&/h2&&ul&&li&请说出 spread operator 六种以上的用法&/li&&li&Number.isNaN 和 Global.isNaN 有什么区别&/li&&li&Object.getPrototypeOf() 和 Reflect.getPrototypeOf() 有哪些差异&/li&&li&Array.from 与 Array.of 有什么区别&/li&&li&解释一下什么是 code unit 以及 code point&/li&&li&charCodeAt 和 codePointAt 有什么区别&/li&&li&fromCharCode 和 fromCodePoint 有什么区别&/li&&li&假设一个数组中有包含一系列promise对象,如何让他们依次执行(在一个成功执行之后再执行下一个)?&/li&&/ul&
9.11日更新:有同学反馈说试题偏向对API使用和API细节。确实存在这样的情况,所以将来有机会会补充一些实战方面的题目,但基础也需要保留--------------------这份试卷我并没有准备答案,一方面所有的代码可以立即在浏览器中执行看到(我)效(很)果(懒)…
&p&先说结论:&b&指纹是一种不够安全的身份认证方式&/b&。&/p&&br&&p&确切来说,所有基于生物特征的身份认证,包括人脸识别、声纹识别、静脉识别等等,都是不够安全的。&/p&&p&不安全到什么程度呢?业内共识是:生物特征不能作为&b&唯一认证手段&/b&。&/p&&p&密码有成为唯一认证手段的资格,U盾、ID卡这些也没问题。换句话说,你的某个帐号可以只用密码保护、也可以只用U盾;但如果设计成没有密码、只用指纹认证就能访问,对不起,安全不合格。&/p&&p&单说这个问题的话:为什么手机重启后必须输入一次密码,不能直接用指纹解锁?有人回答说因为指纹信息是用密码保护的,得输入密码才能读取指纹。但这只回答了一半,之所以这么做,仍然是因为指纹不够安全。如果哪款手机重新开机后直接能用指纹解锁,说明它的安全性是低于行业一般水平的。&/p&&br&&p&为什么它不安全?让我们从头开始详细讲讲吧。&/p&&p&身份认证是自古就有的安全机制。口令、印信、花押,无论哪种首先都是为了解决「你是谁」的问题,这一步之后才是「允许你做什么」。&/p&&p&认证因素五花八门,并且随着科技进步一直在增加。但大体上分为三类:&/p&&ul&&li&你知道的:如密码、安全问题的答案、PIN码、解锁图案等,属于用户知识的一部分;&/li&&li&你拥有的:如ID卡、令牌、U盾、能接收验证码的手机等,属于用户携带的物品和所包含的信息;&/li&&li&你自身的:如指纹、虹膜、面部特征、声纹、DNA、字迹、打字习惯等,属于用户自身特征和行为习惯的一部分。&/li&&/ul&&br&&p&以指纹为代表的用户生物特性都属于「你自身的」这类。而它们之所以被业界公认为不够安全,有以下四个决定性的原因:&/p&&br&&ul&&li&&b&易复制和窃取&/b&&/li&&/ul&&p&与人类的记忆不同,生物特性大部分是暴露在外的。用照片骗过人脸识别设备的新闻也不止一两次了;在杯子、桌子、键盘上到处都印着你的指纹,提取复制一枚指模可能只需要几十分钟时间。更夸张的是,你甚至不用接触到本人,只需足够清晰的照片就能复制出指纹来。&/p&&p&2014年的一场黑客会议上展示了通过照片还原德国国防部长的指纹。&/p&&img src=&/v2-9b1de291bca447f_b.png& data-rawwidth=&804& data-rawheight=&435& class=&origin_image zh-lightbox-thumb& width=&804& data-original=&/v2-9b1de291bca447f_r.png&&&br&&p&哪怕是虹膜、静脉、DNA这种肉眼不可见的信息,也能够通过专用设备提取出来——如果不能提取还怎么验证呢?&/p&&br&&ul&&li&&b&无法修改&/b&&/li&&/ul&&p&每次大规模密码泄漏事件后各大网站纷纷提醒大家更换自己的常用密码。但如果指纹信息泄漏呢?手指只有十根,这种事多来几次就只能号召大家砍手了。面部信息呢?难道要整容么?&/p&&p&生物信息不可变的属性是它能成为身份认证因素的理由,但数字化时代的到来,反而成了最大的隐患。这也是苹果等各大厂商对此十分谨慎的理由。&/p&&br&&ul&&li&&b&容错范围大&/b&&/li&&/ul&&p&与精确的文字密码或数字证书比起来,指纹、面部、声音等信息必须从生物体上实时获取,而这个过程不可能是完全准确的。必然会存在以下两个几率:&/p&&p&一是拒真率(FRR),即应该通过认证的被拒绝;&/p&&p&一是认假率(FAR),即不该通过认证的通过了。&/p&&p&识别模块的技术参数往往都是FRR小于万分之一、FAR小于百万分之一左右。但这只是理论,实际应用中为了能识别出油污的手指、低光照下化妆的脸、嘈杂充满噪音的环境,必然会放宽识别范围,这也导致了窃取复制的指模、照片就算不完全精确,也有一定机会弄假成真、骗过识别算法。&/p&&br&&ul&&li&&b&难以加密&/b&&/li&&/ul&&p&重要信息应该加密存储而不是明文,这是安全常识。&/p&&p&但加密也有可逆和不可逆之分。可逆加密顾名思义就是可以通过某种算法还原出明文,而不可逆加密则不能还原。比如常见的散列(哈希)算法,就是将任意长度的文本加密成固定长度的一串代码,并且无法还原。(散列碰撞的可能性这里暂时忽略,只提算法)&/p&&p&看不到明文,怎么判断密码的正确性呢?答案很简单,把用户输入的密码再做一次哈希,跟之前存储的一对比,如果一致的话就说明密码正确。&/p&&p&但哈希是一种差之毫厘谬以千里的算法。以常用的SHA-1为例,「123456」的结果是「7c4a8d09ca2f8941b」,而「123457」则是「908f704ccaadfd86abde30f2744fe」,没有一个字母是相同的。因此它只能应用于精确的密码或数字证书等,对于需要模糊对比的指纹、声纹、面部图像等则完全不适用。就算存储时用了加密算法,在对比阶段必须还原成明文,从而有了泄漏的可能性。&/p&&p&明文+无法修改,这意味着指纹一旦泄漏就是不可挽回的灾难。&/p&&br&&p&综合以上四点,所有的生物因素认证基本都是不够安全也不该滥用的。&/p&&p&但这并不代表它不能用。&/p&&br&&p&一般来说,在身份认证过程中为了提高安全性,所以我们在需要加强身份校验时会使用双因素认证。但双因素绝大部分情况下指的是&b&「你知道的+你拥有的」,&/b&而极少有&b&「你自身的」&/b&。&/p&&p&比如ATM取款,需要你拥有的银行卡+你知道的密码。&/p&&p&再比如一些私人重要帐号登录,需要你知道的密码+你拥有的手机接收到的验证码。&/p&&p&只有在少数历史遗留场合才仍然保留用户自身信息的验证,比如信用卡无密码签名,之所以我们能接受这种很不安全的方式,是因为风险转嫁给了银行,同时用严厉的法律来约束。&/p&&br&&p&在已经有了足够安全的基本认证方式之后,才能用生物信息作为辅助手段在不重要的场合临时代替一下。&/p&&p&在操作系统重要功能时必须验证密码;&/p&&p&在设置或修改指纹信息时必须验证密码;&/p&&p&在涉及金融资产时,如果金额小于100~200元才允许使用指纹,超过则必须验证密码;特别大的金额还要使用短信验证、U盾或者银行柜台办理;&/p&&p&等等等等。&/p&&br&&p&智能手机在重开机时验证密码、每隔固定时间要输入一次密码、指纹多次识别失败必须用密码解锁,都是出于同样的考虑:安全。&/p&&p&在同等技术条件下,安全和快捷是难以兼得的。在面对不可逆的长期隐患时,适当牺牲快捷而提高安全性才是负责任的行为。&/p&
先说结论:指纹是一种不够安全的身份认证方式。 确切来说,所有基于生物特征的身份认证,包括人脸识别、声纹识别、静脉识别等等,都是不够安全的。不安全到什么程度呢?业内共识是:生物特征不能作为唯一认证手段。密码有成为唯一认证手段的资格,U盾、ID卡…
&img src=&/50/v2-6bf0af7ac4c57ad75fcb7df374e964af_b.png& data-rawwidth=&1919& data-rawheight=&1079& class=&origin_image zh-lightbox-thumb& width=&1919& data-original=&/50/v2-6bf0af7ac4c57ad75fcb7df374e964af_r.png&&&blockquote&线框图在 UX 设计中的重要性不言而喻。它们为设计行为提供指导,给视觉设计师提供更明确的方向。也能更清楚地传达设计想法。在这篇文章里,作者收集了世界顶尖设计师的线框图,大家可以参考学习。&br&&/blockquote&&p&&img src=&/v2-29a598acacf2c65ffea1b2_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-29a598acacf2c65ffea1b2_r.jpg&&&a href=&/?target=https%3A///%40alagoon& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Anthony Lagoon&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///underbelly& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Underbelly&i class=&icon-external&&&/i&&/a&&br&&/p&&p&&img src=&/v2-b1931adf92ceecacb0c5dcc9f07e2e10_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-b1931adf92ceecacb0c5dcc9f07e2e10_r.jpg&&&a href=&/?target=https%3A///%40alexsailer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Alex Sailer&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///focuslab& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Focus Lab&i class=&icon-external&&&/i&&/a&(TedTodd 线框图)&br&&/p&&p&&img src=&/v2-b3aa3f3752003ddd2b57ec3db48ed92a_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-b3aa3f3752003ddd2b57ec3db48ed92a_r.png&&&a href=&/?target=https%3A///%40ueno& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ueno&i class=&icon-external&&&/i&&/a& 登录引导界面的线框图&br&&/p&&p&&img src=&/v2-e5f712acf27ee7e8e8fe61_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-e5f712acf27ee7e8e8fe61_r.jpg&&&a href=&/?target=https%3A///%40bagusfikriyuliono& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Bagus Fikri Yuliono&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///fikristudio& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fikri Studio&i class=&icon-external&&&/i&&/a& 事务管理仪表盘的线框图&br&&/p&&p&&img src=&/v2-4c7d83e0e28e3ffe3a555f283f4b0d04_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-4c7d83e0e28e3ffe3a555f283f4b0d04_r.jpg&&&a href=&/?target=https%3A///%40alagoon& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Anthony Lagoon&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///underbelly& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Underbelly&i class=&icon-external&&&/i&&/a& 手绘 UI&br&&/p&&p&&img src=&/v2-529d21ff3c9502f55fca8_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-529d21ff3c9502f55fca8_r.png&&&a href=&/?target=https%3A///aaronstump& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&aaron stump&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///InVisionApp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&InVision&i class=&icon-external&&&/i&&/a& &br&&/p&&p&&img src=&/v2-825d9d364aabbb5cfa67887_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-825d9d364aabbb5cfa67887_r.png&&&a href=&/?target=https%3A///%40FChiumiento& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Filippo Chiumiento&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///%40NEVERBLAND& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NEVERBLAND&i class=&icon-external&&&/i&&/a& Neverbland的提交方案&br&&/p&&p&&img src=&/v2-38aef33fab05a48f90b672f829b3f27d_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-38aef33fab05a48f90b672f829b3f27d_r.png&&
by &a href=&/?target=https%3A///%40cuberto& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cuberto&i class=&icon-external&&&/i&&/a& 从线框图到设计&br&&/p&&p&&img src=&/v2-404f78b7f5bfec15a7e0ef_b.png& data-rawwidth=&1200& data-rawheight=&767& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&/v2-404f78b7f5bfec15a7e0ef_r.png&&&a href=&/?target=https%3A///%40buatoom& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&buatoom&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///Omise& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Omise&i class=&icon-external&&&/i&&/a& Apple Watch 线框图&br&&/p&&p&&img src=&/v2-ad7fcc5ecdde_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-ad7fcc5ecdde_r.png&&&a href=&/?target=https%3A///pons& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Michael Pons&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///wearepg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PG&i class=&icon-external&&&/i&&/a& 简化后的checkout 流程&br&&/p&&img src=&/v2-0a3ac5f659ae5f0df1a846e5a350e65a_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-0a3ac5f659ae5f0df1a846e5a350e65a_r.jpg&&&p&&a href=&/?target=https%3A///%40musmodo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sergey Jani&i class=&icon-external&&&/i&&/a& from &a href=&/?target=https%3A///luft& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LUFT&i class=&icon-external&&&/i&&/a& 调研1.0&br&&/p&&p&&img src=&/v2-52f9f7e0dafebdec3d52bd_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-52f9f7e0dafebdec3d52bd_r.png&&&a href=&/?target=https%3A///%40_jannalynn&}

我要回帖

更多关于 js修改json文件内容 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信