【问题标题】:Map collections in ES-2015 wtih an Error on loop output [closed]ES2015 中的映射集合,循环输出出错 [关闭]
【发布时间】:2018-01-09 16:48:50
【问题描述】:

我想了解Map 集合的算法在 ES-2015 中是如何工作的,但是当我使用Map 方法时,我遇到了一个奇怪的情况,变量ab 关于在函数循环结束时缺少“)”

有人知道可能是什么问题吗?

'use strict';

let map = new Map([
  ['1',  'str1'],
  [1,    'num1'],
  [true, 'bool1']
]);


map.forEach((value, key, map) => {
	 let a = `${value}`.split(',')[0];
	 let b = `${value}`.split(',')[1];
  console.log( a ':' b ); // got an error "SyntaxError: missing )
})                        // after argument list"

【问题讨论】:

  • 请注意,单行 console.log(1 ':' 2) 会出于完全相同的原因引发完全相同的错误,而无需所有额外的代码。
  • @OP 请不要在您的标题中添加Solved。请参阅此元帖子:meta.stackoverflow.com/questions/311829/…
  • 谢谢大家的帮助!如此愚蠢和平庸的错误。今天对我来说可能是艰难的一天:(

标签: javascript function loops


【解决方案1】:

console.log 中的语法无效,使用 console.log(a, ':', b)console.log(a + ':' + b)

【讨论】:

    【解决方案2】:

    您似乎想在控制台中为 Map 中的每个键值对打印 Key:Value。只需修复 console.log 即可,但由于您正在了解 Map,因此我要补充一下为什么 Map 比 Javascript 普通对象更适合您想要的输入。

    当你向Map 提供这样的二维数组时,它会创建一个类似于{'1': 'str1', 1: 'num1', true: 'bool1'} 的ES6 Map

    现在创建 ES6 映射与普通 Javascript 对象之间的区别在于,键在 Map 中保留了它们提供的数据类型。

    Object 通常将所有键视为字符串,因此当您提供具有 StringStringNumber 的条目时,对象会将它们都视为 "1" 并分配最近给"1"1 赋值。

    let object = {'1': 'str1', 1: 'num1', true: 'bool1'}
    console.log(object);
    // {1: "num1", true: "bool1"}
    

    虽然您创建的地图将像这样创建

    Map(3) {"1" => "str1", 1 => "num1", true => "bool1"}
    

    'use strict';
    
    let map = new Map([
      ['1',  'str1'],
      [1,    'num1'],
      [true, 'bool1']
    ]);
    
    
    map.forEach((value, key, set) => {
      console.log( key + ':' + value ); 
    })
    
    let object = {'1': 'str1', 1: 'num1', true: 'bool1'}
    
    console.log(object);

    【讨论】:

    • 非常感谢您的广泛回复!
    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多