我在 javascript 中使用以下代码:
let group = false;
let internalId = "someString";
let appliedTo = "someOtherString";
let keyToGroupBy = true === group ? internalId : appliedTo;
if(grouped.hasOwnProperty([keyToGroupBy])) {
...
}
有人可以提供一下为什么在 mdn 中使用括号和 keyToGroupBy 效果更好吗? 这被认为是一种黑客行为(偶然起作用)还是常用的东西? 有更好的方法来做同样的事情吗?
最佳答案
“括号符号”不是 bracket notation 。您定义的内容是 an array literal对于只有一个元素的数组:
let group = false;
let internalId = "someString";
let appliedTo = "someOtherString";
let keyToGroupBy = true === group ? internalId : appliedTo;
console.log(Array.isArray([keyToGroupBy]))
所以,它“有效”,因为对象的属性要么是字符串,要么是符号。由于您没有提供符号,因此它将被转换为字符串。当您对数组执行此操作时,结果是...等于第一个元素的字符串:
let group = false;
let internalId = "someString";
let appliedTo = "someOtherString";
let keyToGroupBy = true === group ? internalId : appliedTo;
let arr = [keyToGroupBy];
console.log(String(arr) === arr[0]);
console.log(String(arr));
转换数组 to a string涉及内部调用 Array#join()
并且由于没有其他值,因此不会生成分隔符,并且不会向数组中的单个字符串添加任何内容。
所以,你正在做一种相当迂回的方式......只是检查字符串。
Is this considered a hack(works by chance)
这主要是一种黑客行为。它并没有完全滥用类型转换规则,但肯定是在回避它们。
or it is something commonly used?
不,不是。如果您首先需要的只是一个字符串,则没有理由将字符串包装到数组中...然后再次将它们转换为字符串。
is there a better way to do the same?
是的,只是在任何地方都没有数组文字:grouped.hasOwnProperty(keyToGroupBy)
关于javascript - 使用带有括号表示法的 hasOwnProperty 的 Mdn 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60061627/