gpt4 book ai didi

用于检查集合中值的 Javascript 命令?

转载 作者:行者123 更新时间:2023-11-29 14:59:05 24 4
gpt4 key购买 nike

我正在尝试寻找一种创造性的方式/补丁来最小化这条线:

 if(myParam == '1' || myParam == 'a' || myParam == '*' || myParam == '@' || myParam == undefined || myParam == null || myParam == ' ')
{...
}

一个解决方案是使用 indexOf - 但它不是跨浏览器的(我可以编写自己的函数来表现得像 indexOf - 但我不想这样做)。

所以我尝试了 in operator

但 in 运算符仅处理对象属性名称索引

所以我尝试了这个(对象属性):

   if(window.lala in {
'*': 0,
'a': 0,
'@': 0,
' ': 0,
undefined: 0,
null: 0
}) alert('1')

我认为它正在发挥作用。

请问 2 个问题:

问题 #1

将属性名称设为 [undefined] 或 [' '] 或 [null] 是否安全?它会一直有效吗?

问题 #2还有其他解决方案吗?

(大小写/切换也可以,我知道...)

最佳答案

您所拥有的不适用于未定义的。您可以拥有一个名为 "undefined" 的属性,但这是一个字符串名称,而不是实际的 undefined 值。您可能会通过类型转换获得匹配,但如果您也有一个名为 "undefined" 的字符串,它也会匹配,这不是您想要的。

我会建议使用 === 来避免任何类型转换的更明确的测试。有几种方法可以做到这一点,它们比您使用的方法稍微简单一些:

if (myParam === null || myParam === undefined || 
(myParam && myParam.length == 1 && "1a*@ ".indexOf(myParam) !== -1) {
// code here
}

或者你可以制作一个数组和你自己的跨浏览器函数(或者使用一个 polyfill 用于 Array.indexOf() 来搜索一个可以包含所有值的数组:

function inArray(val, array) {
for (var i = 0; i < array.length; i++) {
if (array[i] === val) {
return(true);
}
}
return(false);
}

var testValues = [null, undefined, "1", "a", "*", "@", " "];
if (inArray(window.lala, array)) {
// your code here
}

您可以使用您正在试验的对象形式,只需对 nullundefined 使用显式测试,但我认为 string.indexOf() 我的第一个提案中的建议更简单。不管怎样,这是一个使用对象的安全形式

if (myParam === null || myParam === undefined || 
(myParam && (myParam in {"*":0, "1":0, "a":0, "@":0, " ":0})) {
// code here
}

我的建议是第一个选项,因为我认为它最干净,而且只需向测试字符串添加更多字符即可轻松扩展。

关于用于检查集合中值的 Javascript 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12834373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com