直观地优化串联在一起的 JavaScript 条件运算符

发布于 2024-07-29 03:43:47 字数 348 浏览 5 评论 0原文

在 JavaScript 中,假设我们有以下代码,

var test = 'd';
if (test != 'a' && test != 'b' && test != 'c')
  alert('were good to go');

这个 if 对我来说似乎相当冗长。 我很想写一些类似的东西,

if (test != ('a' && 'b' && 'c')
  alert('were good to go');

遗憾的是这行不通。 更优雅的写法是什么?

In JavaScript let's say we have the following code

var test = 'd';
if (test != 'a' && test != 'b' && test != 'c')
  alert('were good to go');

This if seems rather lengthy to me. I would love to write something like

if (test != ('a' && 'b' && 'c')
  alert('were good to go');

Sadly this doesn't work. What is a more elegant way to write this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

π浅易 2024-08-05 03:43:47
var test = 'd';
if (!/[abc]/.test(test))
  alert('were good to go');
var test = 'd';
if (!/[abc]/.test(test))
  alert('were good to go');
耶耶耶 2024-08-05 03:43:47

你无法做到这一点,但你可以像这样相当接近:

Array.prototype.contains = function(v) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == v) return true;
    }
    return false;
}

if (!['a', 'b', 'c'].contains('d')) {
    alert('good to go');
}

大多数像样的 JS 库应该包含像这样的列表原型的许多变体。

You can't get do that, but you can get fairly close like this:

Array.prototype.contains = function(v) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == v) return true;
    }
    return false;
}

if (!['a', 'b', 'c'].contains('d')) {
    alert('good to go');
}

Most decent JS libs should contains lots of variations on list prototypes like this.

伴梦长久 2024-08-05 03:43:47

我同意马修·克拉姆利的观点,即这是一个逻辑上无效的问题。 为了好玩,我假设你打算使用 && 在你的问题中...

var test = 'd';
({a: 1, b: 1, c: 1}[ test ]) || alert("we're good to go");

或者..

var test = 'd';
!(test in {a: 0, b: 0, c: 0}) && alert("we're good to go");

I concur with Matthew Crumley that this is a logically invalid question, as-is. For fun I'm going to assume you meant to use && in your question...

var test = 'd';
({a: 1, b: 1, c: 1}[ test ]) || alert("we're good to go");

or..

var test = 'd';
!(test in {a: 0, b: 0, c: 0}) && alert("we're good to go");
提笔落墨 2024-08-05 03:43:47

一个小小的辅助功能将带您走得更远......

// If you write this...
function set(){
    obj={}
    for (var i=0; i<arguments.length; i++)
        obj[arguments[i]]=1;  
    return obj
}

// Then you can do this!
if (! test in set('a','b','c')){
    //Do stuff.
}

One little helper function will take you far...

// If you write this...
function set(){
    obj={}
    for (var i=0; i<arguments.length; i++)
        obj[arguments[i]]=1;  
    return obj
}

// Then you can do this!
if (! test in set('a','b','c')){
    //Do stuff.
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文