如何避免在JavaScript单行'if'语句中使用重复短语

时间:2019-10-14 15:12:42

标签: javascript

我正在编写一些代码,发现这很烦人,经过一番研究后找不到答案。尽管效果很好,但必须写三遍this.className感觉很笨拙:

this.className != 'selected' ? this.className = 'selected' : this.className = 'unselected';

我发现这可行。

this.className = (this.className != 'selected') ? 'unselected' : 'selected';

..但是我想知道是否有可能实现相同的功能,但是this.className只写了一次,类似于以下内容:

this.className = 'selected' ? 'unselected' : 'selected';

接受任何建议。

4 个答案:

答案 0 :(得分:3)

  

...但是我想知道是否有可能实现相同的功能,但是this.className只写一次,类似于此

不,您不能那样做,在通常情况下,第二个选择就差不多了

this.className = (this.className != 'selected') ? 'unselected' : 'selected';

您的第三个选项将导致始终 设置'unselected',因为'selected'是真实的,因此第二个操作数('unselected')的值始终为结果。


当然,要了解有关DOM元素和类的细节:您始终可以只拥有一个selected类并对其进行切换(也许通过this.classList.toggle('selected'))。没有该类相当于拥有unselected类。

答案 1 :(得分:0)

第二个是最好的选择

 public function wishlist(){
    return $this->hasMany(Wishlist::class);
 }

第三错!

答案 2 :(得分:0)

如果您发现自己经常这样做,则可以随时编写一种方法

function switchProperty(obj, prop, test, flip){
  obj[prop] = obj[prop] == test ? flip : test;
}

var myObj = {
   foo:"bar"
}

console.log(myObj.foo);
switchProperty(myObj,'foo', 'bar', 'baz');
console.log(myObj.foo);
switchProperty(myObj,'foo', 'bar', 'baz');
console.log(myObj.foo);

您的使用情况将是

 switchProperty(this,'className','selected','unselected');

答案 3 :(得分:0)

状态和类名称与imo不同。

关于存储状态的变量呢?

this.isSelected = !this.isSelected;
this.className = (this.isSelected ? 'un' : '') + 'selected';