一道三目运算测试题引发的思考

一、测试题

原题:以下代码的输出是?

var val = "false";
alert("val is " + val ? "true" : "false");

解析:

1. 此题考察的知识点: 三目运算、**运算优先级**,字符串拼接。
2. 因为 加法(+) 的优先级比 条件运算符(?) 高,所以先运算加号("val is " + val),
3. "val is " + val 是字符串拼接,结果是**非空**字符串,在js中字符串的布尔类型为true。 
4. 所以 弹出 字符串 “true”。

知识点

  1. 三目运算: condition ? expr1 : expr2
    condition为真 执行 expr1 ;condition为假执行 expr2
  2. 运算优先级
  3. 在js中布尔类型只有以下6种情况为假,其他都为真。
    false, 0, undefined, NaN, “”, null
  4. “”+10
    数字10前面拼接空字符串,改变数据类型,把 number 转换为 string

二、思考

思考一:代码修改为 以下代码的输出是

var val = false;
alert( "" + val ? "true" : "false");

/*
* 解析:
* 1. val是布尔类型false,在前面拼接空字符串,转换为字符串类型,
* 2. "" + val 结果是**非空**字符串,
* 3. 结果弹出 字符串 “true”。
*/

思考二:代码修改为 以下代码的输出是

var val = "false";
alert( val ? "true" : "false");

/*
* 解析:
* val 是字符串"false" 由上知识点
* 显而易见 弹出 字符串 “true”。
*
*/
    原文作者:月影
    原文地址: https://segmentfault.com/a/1190000010535646
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞