关于三元运算符的问题

var money=0;
money = (null)?0:money;
console.log(money);
// money = 0 返回0, money = null 返回0,money = 100返回100,,这个是为什么

一般不都是这样么
var money=0;
money = (money)?money:0;
console.log(money);

阅读 3.1k
3 个回答

js中表示否定意义的对象有: false, 0, '', null, undefined, NaN;
https://developer.mozilla.org...

直接三目运算符 初始化赋值就可以不需要先初始化 0

var money=0;
money = (null)?0:money;
console.log(money);
// money = 0 返回0, money = null 返回0,money = 100返回100,,这个是为什么

这段完全是无效代码,而且money = null 返回是null而不是0,因为最终简化下来就money = money

因为null是假值,这个表达式永远是false自然找后面那一个呀。

但你用money又不同了,这是一个变量,变量里面的值根据你的赋值会有所变化。假如默认值是0, 后面的值修改了这个变量的值,改为10. 那么就能是真值啦。

var money = 0;
money = money ? money : 0;

// 此时 money 没有发生变化,由于 0 是假值,因此赋值为 0
console.log(money); //0

money = null;
money = money ? money : 0;

// 此时程序运行到某段函数,对 money 这个值赋值为 null,后面又进行了三目判断赋值
// 由于 null 也是假值,三元表达式的结果是 0
console.log(money); // 0

money = 10;
money = money ? money : 0;

// 此时 money 变成了真值,三元表达式求出真值得那个一个选项
// 由于真值选项那个分支也是 money 自身的值,因此将 10 重新赋值给 money。得到结果 10
console.log(money); // 10

我觉得题主想问的是真假值判断的问题,你可以看这篇文章: 条件语句的简写技巧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏