【问题标题】:Why does this program not print anything in the page?为什么这个程序不打印页面中的任何内容?
【发布时间】:2020-05-11 16:31:54
【问题描述】:

//这个程序计算一个数可以被2整除多少次。

//这是它被分成2的次数和次数。

    let Num=64
    let divisible=0

//这是三元运算符,它基本上是在问一个问题。

    Num % 2 === 0 ?
    divisible=divisible++ : document.write(divisible);

    Num/=2;

    Num % 2 === 0 ?
    divisible=divisible++ : document.write(divisible);

    num/=2

    Num % 2 === 0 ?
    divisible=divisible++ : document.write(divisible);

//一旦语句评估为假,它就会写入数字被除的次数 通过 2 进入文档。

【问题讨论】:

  • 因为 64 可以被 2 整除而不是 3 倍,所以这不会打印任何东西?
  • 64、32、16 都可以被 2 整除。虽然num != Num 所以它只是检查 64 和 32 是否可以被 2 整除,document.write 分支永远不会触发。该程序没有意义。
  • 为什么不先尝试自己解决你的任务呢?
  • 顺便说一句,在这里使用三元运算符不是一个好习惯。 if/else 会更合适。

标签: javascript conditional-operator


【解决方案1】:

你可以试试循环。

let num=64;
let divisible=0;
while(num % 2 === 0) {
    num /= 2;
    divisible++;
}
console.log(divisible);
document.write(divisible);

【讨论】:

    【解决方案2】:

    这段代码有几个问题。一些 cmets 指出了循环问题。但是,循环无法解决的突出问题是您滥用post-fix increment operator++。该运算符返回值,然后递增该值,因此divisible = divisible++ 将导致divisible 保持不变。根据您的意图,您只需divisible++

    尝试以下方法:

    while(true){
        if(Num % 2 === 0){
            divisible++; 
            Num /=2;
        }
        else{
            document.write(divisible); 
            break;
        } 
    }
    

    【讨论】:

      【解决方案3】:

      这里按照 64 和 没有提供循环的例子,它永远不会去 上面提供的 3 步中的 document.write(divisible) 语句。这就是为什么没有打印出来的原因。

      此外,divisible=divisible++ 没有任何意义。在这里,由于是后缀操作符,第一个值会被赋值,然后会递增,所以整除的值只会是0

      Num % 2 === 0 ?divisible++ : document.write(divisible); 
      

      而且,根据我的理解,document.write 接受字符串参数,但这里 divisible 是数字类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-04
        • 2013-04-06
        • 2019-05-18
        • 1970-01-01
        • 2016-10-31
        • 2021-12-25
        • 2016-01-17
        • 1970-01-01
        相关资源
        最近更新 更多