javascript - 使用带有括号表示法的 hasOwnProperty 的 Mdn 引用

标签 javascript javascript-objects

我在 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/

相关文章:

javascript - 我们的堆变得越来越大,然后又消失了。很多。看看这个截图,这看起来像内存泄漏吗?

javascript - 使用 localStorage 编辑一组对象

JavaScript 对象操作在唯一操作后显示不同键的相同值

javascript - 为函数的隐式声明的局部变量赋值被认为是不好的做法?

php - 根据域显示不同的内容

javascript - 如何在没有一键的情况下解构对象

javascript - 关于javascript函数调用传递this的解释

javascript - 声明 JavaScript 数组时 “{}” 和 “[]” 有什么区别?

javascript - 使用具有不同变量的一个函数

javascript - 未捕获的类型错误 : Failed to execute 'importStylesheet' on 'XSLTProcessor' : parameter 1 is not of type 'Node'