Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在QML中声明JS dict时如何使用JS数组作为键_Javascript_Qt_Dictionary_Qml_Qtquick2 - Fatal编程技术网

Javascript 在QML中声明JS dict时如何使用JS数组作为键

Javascript 在QML中声明JS dict时如何使用JS数组作为键,javascript,qt,dictionary,qml,qtquick2,Javascript,Qt,Dictionary,Qml,Qtquick2,在QML JS实现中,我可以这样写: property var dict1: ({}) property var dict2: { 'a':1, 'b':2, 'c':3 } // property var dict3: { [0,0]:1, [1,4]:5, [2,4]:3 } // can't do this! // but can do this. Component.onCompleted: { dict1[[0,0]] = 1 dict1[[1,4]] = 5

在QML JS实现中,我可以这样写:

property var dict1: ({})
property var dict2: { 'a':1, 'b':2, 'c':3 }
// property var dict3: { [0,0]:1, [1,4]:5, [2,4]:3 } // can't do this!

// but can do this.
Component.onCompleted: {
    dict1[[0,0]] = 1
    dict1[[1,4]] = 5
    dict1[[2,4]] = 3
}
因此,最后一部分使用JS数组作为dict中的键。但是,第3行(dict3)中的声明是不可能的。我不明白,如果预期的结果通过其他方式是可能的,为什么一个符号不可能

所以我的问题是:如果不需要
组件.onCompleted
或类似的hack,如何实例化
dict

如果没有办法,请说明原因。

JS对象键始终是字符串。没有数组作为键或对象作为键这样的东西

dict1[[0,0]]=1
严格等同于
dict1['0,0']=1

底线是属性分配和属性访问自动将键强制转换为字符串


请尝试以下操作:

dict1[dict2] = 42
console.log(JSON.stringify(dict1))
输出:{“0,0”:1,“1,4”:5,“2,4”:3,“[object]”:42}

表达式
dict2
被转换为其字符串表示形式并用作键。然后,您可以使用以下任意一项访问值42

  • dict1[“[对象]”]
  • dict1[dict2]
  • dict1[dict1]
    因为
    toString(dict1)
    返回
    “[object object]”
  • dict1[({})]
    因为
    toString(({}))
    返回
    “[object object]”

这些强制转换在对象创建时的执行方式不同,这意味着您不能执行
属性var dict2:{[1,2]:3}
。但是,
属性变量dict2:{“1,2”:3}
可以正常工作。

JS对象键始终是字符串。没有数组作为键或对象作为键这样的东西

dict1[[0,0]]=1
严格等同于
dict1['0,0']=1

底线是属性分配和属性访问自动将键强制转换为字符串


请尝试以下操作:

dict1[dict2] = 42
console.log(JSON.stringify(dict1))
输出:{“0,0”:1,“1,4”:5,“2,4”:3,“[object]”:42}

表达式
dict2
被转换为其字符串表示形式并用作键。然后,您可以使用以下任意一项访问值42

  • dict1[“[对象]”]
  • dict1[dict2]
  • dict1[dict1]
    因为
    toString(dict1)
    返回
    “[object object]”
  • dict1[({})]
    因为
    toString(({}))
    返回
    “[object object]”

这些强制转换在对象创建时的执行方式不同,这意味着您不能执行
属性var dict2:{[1,2]:3}
。但是,
属性变量dict2:{“1,2”:3}
可以正常工作。

谢谢!现在我明白了!谢谢现在我明白了!