JavaScript中Invalid left-hand side in assignment错误排查(三元表达式版FizzBuzz)
问题分析与解决
你代码里的报错和数字转字符串无关,是几个明显的语法错误导致的:
- 条件判断写错了:
x % 5 === 5 = 0是非法语法,应该是x % 5 === 0——你多写了5 =,这会让JS把5 = 0当成赋值操作,而赋值的左操作数不能是常量,所以触发Invalid left-hand side in assignment错误。 - 三元表达式括号不匹配:最后多了一个右括号
),破坏了语法结构。 - 循环内没有递增
x,就算修复前面的错误,代码也会无限循环。
修正后的三元表达式实现
以下是能正常运行的纯三元表达式版本:
var x = 1; while (x <= 20) { var result = (x % 3 === 0 && x % 5 === 0) ? "FizzBuzz" : (x % 3 === 0) ? "Fizz" : (x % 5 === 0) ? "Buzz" : x.toString(); // 转字符串让输出类型统一,也可以直接写x,JS会自动转换 console.log(result); x++; // 必须递增x,否则无限循环 }
额外说明
- 嵌套三元表达式尽量换行对齐,避免写成超长单行代码,提升可读性。
- 如果你想更简洁,也可以用混合逻辑的写法(但这不是纯三元表达式):
var x = 1; while (x <= 20) { var result = ''; result += x % 3 === 0 ? 'Fizz' : ''; result += x % 5 === 0 ? 'Buzz' : ''; console.log(result || x); x++; }
内容的提问来源于stack exchange,提问作者Ahmed Khamis
相关产品推荐
相关产品推荐

