如果是,则切换具有不同输出的情况

If else to switch case with different output

本文关键字:输出 情况 如果      更新时间:2023-09-26

我正试图将此if else更改为开关:

var check = $(".fav_c").children();
if ($(check).attr("data-user_id")){
    console.log('users');
}
else if ($(check).attr("data-company_id")){
    console.log('companies');
}

对此:

var check = $('.fav_c').children();
switch (check) {
  case $(check).attr('data-user_id') :
    console.log('users');
    break;
  case $(check).attr('data-company_id') :
    console.log('companies');
    break;
  default:
    console.log('default');
}

然而,这并不等同,因为我总是得到默认情况。

怎么了?

您可以添加设置为"company"或"user"的data-category并打开它。

您的两个代码不做相同的事情。

您正在从以下位置更改:

if ($(check).attr("data-user_id") == true)

switch (check) {
  case $(check).attr('data-user_id') :

这意味着:

if (check == $(check).attr("data-user_id"))

switch用于比较两个值。在您的情况下,它不等同于if

实际上,你的switch翻译成if就是

var check = $('.fav_c').children();
if (check == $(check).attr('data-user_id') {
    console.log('users');
} else if (check == $(check).attr('data-company_id')) {
    console.log('companies');
} else {
    console.log('default');
}

正如你所看到的,这没有任何意义。

解决方案

也许你可以试试这个破解:

var check = $('.fav_c').children();
switch (true) {
  case !!$(check).attr('data-user_id') :
    console.log('users');
    break;
  case !!$(check).attr('data-company_id') :
    console.log('companies');
    break;
  default:
    console.log('default');
}

请注意,在每种情况下都添加了!!。它们在这里强制值为bool
这将转化为(对于第一种情况)

true == !!$(check).attr('data-user_id')