JS FizzBuzz代码中方括号求值逻辑、['Fizz'][i%3]含义及所属ES版本问询
FizzBuzz代码问题解答
方括号的求值运算逻辑
JavaScript中一对方括号[]有两类核心用途,这段代码里两种用法都用到了,求值顺序遵循「从内到外,从左到右」的规则:
- 用作数组字面量声明:
['Fizz']、['Buzz']里的方括号,作用是直接创建一个长度为1的数组实例,唯一元素分别为'Fizz'和'Buzz',对应索引为0。 - 用作属性/元素访问符:
数组[索引]结构里的方括号,会先计算括号内表达式的返回值,再以该值为索引去取数组对应位置的元素:如果索引存在就返回对应元素,索引不存在就返回undefined。
['Fizz'][i%3]的具体含义
这行是「数组创建+即时按索引取值」的简写写法,拆分后等价于如下逻辑:
// 1. 声明长度为1的数组 const tempArr = ['Fizz']; // 2. 计算i对3取模的结果作为索引 const index = i % 3; // 3. 按索引取值 const res = tempArr[index];
实际运行效果:
- 当i是3的倍数时,
i%3结果为0,返回数组索引0的元素'Fizz' - 当i不是3的倍数时,
i%3结果为1或2,数组没有对应索引,返回undefined
后续搭配|| ''逻辑,会把undefined转成空字符串,刚好实现非3倍数时不拼接Fizz的效果,['Buzz'][i%5]的运行逻辑完全一致。
整个打印语句的完整逻辑也可以由此推导:两个取数组的结果处理后拼接,如果拼接结果不为空(即属于Fizz/Buzz/FizzBuzz的情况)就输出字符串,否则输出i,刚好满足FizzBuzz的需求。
语法所属ES版本
该写法不属于任何新版本ES的新增特性,数组字面量声明、方括号访问数组元素都是JavaScript最基础的核心语法,从1997年发布的**ES1(ECMAScript 第一版)**就已经纳入标准,所有JS运行环境都原生支持。
内容的提问来源于stack exchange,提问作者Ravindra Naik
相关产品推荐
相关产品推荐

