Tag:选择题
All the articles with the tag "选择题".
输出是什么?
Posted on:2024年9月9日 at 15:55class Counter { #number = 10 increment() { this.#number++ } getNum() { return this.#number } } const counter = new Counter() counter.increment() console.log(counter.#number) 在 ES2020 中,通过 # 我们可以给 clas
下面那个选项将会返回 '6' ?
Posted on:2024年8月18日 at 12:41function sumValues(x, y, z) { return x + y + z; } 通过展开操作符 ...,我们可以 展开 单个可迭代的元素。函数 sumValues function 接收三个参数: x, y 和 z。...[1, 2, 3] 的执行结果为 1, 2, 3,将会传递给函数 sumValues。
输出什么?
Posted on:2024年8月3日 at 21:05const box = { x: 10, y: 20 }; Object.freeze(box); const shape = box; shape.x = 100; console.log(shape) Object.freeze使得无法添加、删除或修改对象的属性(除非属性的值是另一个对象)。 当我们创建变量shape并将其设置为等于冻结对象box时,shape指向的也是冻结对象。你可以使用Ob
输出什么?
Posted on:2024年8月3日 at 21:05[1, 2, 3, 4].reduce((x, y) => console.log(x, y)); reducer 函数接收4个参数: Accumulator (acc) (累计器) Current Value (cur) (当前值) Current Index (idx) (当前索引) Source Array (src) (源数组) reducer 函数的返回值将会分配给累计器,该返回值在数组
使用哪个构造函数可以成功继承 Dog 类?
Posted on:2024年8月3日 at 21:05class Dog { constructor(name) { this.name = name; } }; class Labrador extends Dog { // 1 constructor(name, size) { this.size = size; } // 2 constructor(name, size) { super(name); this.size = size; } /
哪一个方法会返回 'Hello world!' ?
Posted on:2024年8月3日 at 21:05const myMap = new Map() const myFunc = () => 'greeting' myMap.set(myFunc, 'Hello world!') //1 myMap.get('greeting') //2 myMap.get(myFunc) //3 myMap.get(() => 'greeting') 当通过 set 方法添加一个键值对,一个传递给 set方法的
如何能打印出 console.log 语句后注释掉的值?
Posted on:2024年8月3日 at 21:05function* startGame() { const answer = yield "Do you love JavaScript?"; if (answer !== "Yes") { return "Oh wow... Guess we're gone here"; } return "JavaScript loves you back ❤️"; } const game = startG
输出什么?
Posted on:2024年8月3日 at 21:05const person = { name: "Lydia", age: 21 } const changeAge = (x = { ...person }) => x.age += 1 const changeAgeAndName = (x = { ...person }) => { x.age += 1 x.name = "Sarah" } changeAge(person) changeAg
下面的输出是什么?
Posted on:2024年8月3日 at 21:05const person = { firstName: "Lydia", lastName: "Hallie", pet: { name: "Mara", breed: "Dutch Tulip Hound" }, getFullName() { return `${this.firstName} ${this.lastName}`; } }; console.log(person.pet?.na
输出什么?
Posted on:2024年8月3日 at 21:05async function* range(start, end) { for (let i = start; i <= end; i++) { yield Promise.resolve(i); } } (async () => { const gen = range(1, 3); for await (const item of gen) { console.log(item); } })()
输出是什么?
Posted on:2024年8月3日 at 21:05const shape = { radius: 10, diameter() { return this.radius * 2 }, perimeter: () => 2 * Math.PI * this.radius } console.log(shape.diameter()) console.log(shape.perimeter()) 注意 diameter 的值是一个常规函数,但是 pe
输出是什么?
Posted on:2024年8月3日 at 21:05function sayHi() { console.log(name) console.log(age) var name = 'Lydia' let age = 21 } sayHi() 在函数内部,我们首先通过 var 关键字声明了 name 变量。这意味着变量被提升了(内存空间在创建阶段就被设置好了),直到程序运行到定义变量位置之前默认值都是 undefined。因为当我们打印 name
输出是什么?
Posted on:2024年8月3日 at 21:05for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1) } for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1) } 由于 JavaScript 的事件循环,setTimeout 回调会在遍历结束后才执行。因为在第一个遍历中遍历 i 是通过 va
输出什么?
Posted on:2023年12月18日 at 20:43class Counter { constructor() { this.count = 0; } increment() { this.count++; } } const counterOne = new Counter(); counterOne.increment(); counterOne.increment(); const counterTwo = counterOne; count
输出是什么?
Posted on:2023年12月18日 at 20:42const numbers = [1, 2, 3, 4, 5]; const [y] = numbers; console.log(y); 输出是 1。 在这段代码中,我们定义了一个名为 numbers 的数组,并使用解构赋值从 numbers 中提取第一个元素。解构赋值 [y] 将数组的第一个元素赋值给变量 y。 因此,当我们打印 y 时,它的值为 1,表示数组中的第一个元素。
输出是什么?
Posted on:2023年12月18日 at 20:41let person = { name: "Lydia" }; const members = [person]; person = null; console.log(members); 首先我们声明了一个拥有name属性的对象 person。 然后我们又声明了一个变量members. 将首个元素赋值为变量person。 当设置两个对象彼此相等时,它们会通过 引用 进行交互。但是当你将引用从一个
输出是什么?
Posted on:2023年12月18日 at 20:40const foo = () => console.log('First') const bar = () => setTimeout(() => console.log('Second')) const baz = () => console.log('Third') bar() foo() baz() 输出的顺序将会是: First Third Second 这是因为在这段代码中,bar()
输出是什么?
Posted on:2023年12月18日 at 20:39let c = { greeting: 'Hey!' } let d d = c c.greeting = 'Hello' console.log(d.greeting) 输出是 'Hello'。 在这段代码中,变量 c 是一个对象,并且变量 d 与 c 引用同一个对象。当我们将 c 赋值给 d 时,它们引用的是同一个对象,在内存中只有一个对象存在。 因此,当我们修改 c.greeting 的值为
输出什么?
Posted on:2023年7月20日 at 09:29const set = new Set() set.add(1) set.add("Lydia") set.add({ name: "Lydia" }) for (let item of set) { console.log(item + 2) } 这个JavaScript代码片段创建了一个 Set ,并将三个不同类型的元素添加到其中:数字1,字符串"Lydia"和一个包含属性name的对象 {
输出什么?
Posted on:2023年7月5日 at 15:35const myPromise = Promise.resolve(Promise.resolve("Promise!")); function funcOne() { myPromise.then(res => res).then(res => console.log(res)); setTimeout(() => console.log("Timeout!"), 0); console.log
输出什么?
Posted on:2023年3月4日 at 22:52class Bird { constructor() { console.log("I'm a bird. 🦢"); } } class Flamingo extends Bird { constructor() { console.log("I'm pink. 🌸"); super(); } } const pet = new Flamingo(); 我们创建了类 Flamingo 的实例
依次输出什么?
Posted on:2023年3月4日 at 22:52const myPromise = () => Promise.resolve('I have resolved!') function firstFunction() { myPromise().then(res => console.log(res)) console.log('second') } async function secondFunction() { console.log(a
输出是什么?
Posted on:2023年3月4日 at 22:22function sayHi() { return (() => 0)() } console.log(typeof sayHi()); sayHi 方法返回的是立即执行函数(IIFE)的返回值。此立即执行函数的返回值是 0, 类型是 number。 其他参考资料: typeof 运算符返回一个字符串,表示操作数的类型。 下表总结了 typeof 可能的返回值 类型 结果 Undefined "u
输出什么?
Posted on:2023年3月3日 at 20:29const getList = ([x, ...y]) => [x, y] const getUser = user => ({ name: user.name, age: user.age }) const list = [1, 2, 3, 4] const user = { name: "Lydia", age: 21 } console.log(getList(list)) console.
向对象 person 添加什么时,可以通过执行 [...person] 获得类似 ["Lydia Hallie", 21] 的输出?
Posted on:2023年3月3日 at 20:23const person = { name: "Lydia Hallie", age: 21 } [...person] // ["Lydia Hallie", 21] 对象默认并不是可迭代的。 如果迭代规则被定义,则一个对象是可迭代的(An iterable is an iterable if the iterator protocol is present)。 我们可以通过添加迭代器symbo
输出什么?
Posted on:2023年2月2日 at 11:41const name = "Lydia Hallie"; const age = 21; console.log(Number.isNaN(name)); console.log(Number.isNaN(age)); console.log(isNaN(name)); console.log(isNaN(age)); 1. isNaN() isNaN函数是用来确定一个值是否是NaN,可以在全局直
将会发生什么?
Posted on:2023年2月2日 at 11:37let config = { alert: setInterval(() => { console.log('Alert!') }, 1000) } config = null 一般情况下当我们将对象赋值为 null, 那些对象会被进行 垃圾回收(garbage collected) 因为已经没有对这些对象的引用了。 但 setInterval 会有些例外,详见以下知识点: js创建的所有 Obj
输出是什么?
Posted on:2023年2月1日 at 17:43const name = "Lydia"; age = 21; console.log(delete name); console.log(delete age); delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。 delete操作符返回一个布尔值: true指删除成功,否则返回false。但是通过 var, const 或 let 关键字声明的变量无法用
输出什么?
Posted on:2022年10月30日 at 10:56const add = () => { const cache = {}; return num => { if (num in cache) { return `From cache! ${cache[num]}`; } else { const result = num + 10; cache[num] = result; return `Calculated! ${result}`; } }
下面代码的输出是什么?
Posted on:2022年1月9日 at 13:17[[0, 1], [2, 3]].reduce( (acc, cur) => { return acc.concat(cur) }, [1, 2] ) [1, 2]是初始值。 初始值将会作为首次调用时第一个参数 acc 的值。 在第一次执行时, acc 的值是 [1, 2], cur 的值是 [0, 1]。合并它们,结果为 [1, 2, 0, 1]。 第二次执行, acc 的值是 [1, 2, 0
输出是什么?
Posted on:2022年1月9日 at 13:13console.log(+true,!"Lydia"); 一元操作符加号尝试将 bool 转为 number。true 转换为 number 的话为 1,false 为 0。 字符串 'Lydia' 是一个真值,真值取反那么就返回 false。
输出是什么?
Posted on:2022年1月9日 at 13:10class Chameleon { static colorChange(newColor) { this.newColor = newColor return this.newColor } constructor({ newColor = 'green' } = {}) { this.newColor = newColor } } const freddie = new Chameleon({
下面代码中,sum 的值是什么?
Posted on:2022年1月9日 at 13:09const sum = eval('10*10+5') 代码以字符串形式传递进来,eval 对其求值。如果它是一个表达式,就像本例中那样,它对表达式求值。表达式是 10 * 10 + 5。这将返回数字 105。
下面的输出是什么?
Posted on:2022年1月9日 at 13:05for (let i = 1; i < 5; i++) { if (i === 3) continue console.log(i) } 如果某个条件返回 true,则 continue 语句跳过本次迭代。
在点击p标签时,会输出什么?
Posted on:2022年1月9日 at 13:03<div onclick="console.log('div')"> <p onclick="console.log('p')"> Click here! </p> </div> 在事件传播过程中,有3个阶段:捕获、目标和冒泡。 默认情况下,事件处理程序在冒泡阶段执行(除非将 useCapture 设置为 true),它从最深的嵌套元素向外。
在点击 button 时,触发的 event.target 是哪个?
Posted on:2022年1月9日 at 13:00<div onclick="console.log('first div')"> <div onclick="console.log('second div')"> <button onclick="console.log('button')"> Click! </button> </div> </div> event.target 是触发事件的对象 (某个DOM元素) 的引用。 当事件处理程序在
下面会输出什么?
Posted on:2022年1月9日 at 12:51const person = { name: 'Lydia' } function sayHi(age) { console.log(`${this.name} is ${age}`) } sayHi.call(person, 21) sayHi.bind(person, 21) 使用这两种方法,我们都可以传递我们希望 this 关键字引用的对象。但是,.call 是立即执行的。 .bind 返回
输出是什么?
Posted on:2022年1月9日 at 12:47// counter.js let counter = 10; export default counter; // index.js import myCounter from './counter'; myCounter += 1; console.log(myCounter); 引入的模块是 只读 的: 你不能修改引入的模块。只有导出他们的模块才能修改其值。 当我们给myCounter增加一
输出什么?
Posted on:2021年12月25日 at 17:23const person = { name: "Lydia Hallie", hobbies: ["coding"] }; function addHobby(hobby, hobbies = person.hobbies) { hobbies.push(hobby); return hobbies; } addHobby("running", []); addHobby("dancing");
setInterval 方法的返回值是什么?
Posted on:2021年7月4日 at 18:12setInterval(() => console.log('Hi'), 1000) setInterval 返回一个唯一的 id。此 id 可被用于 clearInterval 函数来取消定时。
输出什么?
Posted on:2021年7月3日 at 22:36let randomValue = { name: "Lydia" } randomValue = 23 if (!typeof randomValue === "string") { console.log("It's not a string!") } else { console.log("Yay it's a string!") } if 语句的条件判断 !typeof randomVal
输出什么?
Posted on:2021年7月3日 at 22:36const createMember = ({ email, address = {}}) => { const validEmail = /.+\@.+\..+/.test(email) if (!validEmail) throw new Error("Valid email pls") return { email, address: address ? address : null } }
method 的值选择哪个时,会输出 { name: "Lydia", age: 22 } ?
Posted on:2021年7月3日 at 22:36const keys = ["name", "age"] const values = ["Lydia", 22] const method = /* ?? */ Object[method](keys.map((_, i) => { return [keys[i], values[i]] })) // { name: "Lydia", age: 22 } fromEntries 方法可以将二维数
输出什么?
Posted on:2021年7月3日 at 22:35const promise1 = Promise.resolve('First') const promise2 = Promise.resolve('Second') const promise3 = Promise.reject('Third') const promise4 = Promise.resolve('Fourth') const runPromises = async () =>
输出什么?
Posted on:2021年7月3日 at 22:35const user = { email: "my@email.com", updateEmail: email => { this.email = email } } user.updateEmail("new@email.com") console.log(user.email) updateEmail 函数是一个箭头函数,它没有和 user 对象绑定。这就意味着 this 关键字不会引用到
输出什么?
Posted on:2021年7月3日 at 22:35const animals = {}; let dog = { emoji: '🐶' } let cat = { emoji: '🐈' } animals[dog] = { ...dog, name: "Mara" } animals[cat] = { ...cat, name: "Sara" } console.log(animals[dog]) 对象的键会被转换为字符串。 因为 dog 的
输出什么?
Posted on:2021年7月3日 at 22:35const fruit = ['🍌', '🍊', '🍎'] fruit.slice(0, 1) fruit.splice(0, 1) fruit.unshift('🍇') console.log(fruit) 首先,我们在fruit数组上调用 slice 方法。 slice方法不会修改原始数组,但是会返回从数组切片下来的值:香蕉emoji。 其次,我们在fruit数组上调用 splice
输出什么?
Posted on:2021年7月3日 at 22:35const user = { email: "e@mail.com", password: "12345" } const updateUser = ({ email, password }) => { if (email) { Object.assign(user, { email }) } if (password) { user.password = password } return us
输出什么?
Posted on:2021年7月3日 at 22:35class Calc { constructor() { this.count = 0 } increase() { this.count ++ } } const calc = new Calc() new Calc().increase() console.log(calc.count) 我们设置 calc 变量为 Calc 类的一个新实例。 然后,我们初始化一个 Calc 的新实例,而且调用
输出是什么?
Posted on:2021年7月3日 at 22:35function getFruit(fruits) { console.log(fruits?.[1]?.[1]) } getFruit([['🍊', '🍌'], ['🍍']]) getFruit() getFruit([['🍍'], ['🍊', '🍌']]) ? 允许我们去选择性地访问对象内部更深层的嵌套属性。 我们尝试打印 fruits 数组索引值为 1 的子数组内部的索引值为 1
输出什么?
Posted on:2021年7月3日 at 22:35let count = 0; const nums = [0, 1, 2, 3]; nums.forEach(num => { if (num) count += 1 }) console.log(count) 在 forEach 循环内部的 if 会判断 num 的值是truthy或者是falsy。因为 nums 数组的第一个数字是 0,一个falsy值, if 语句代码块不会被执行。count
哪一个选项会导致报错?
Posted on:2021年7月3日 at 22:34const emojis = ["🎄", "🎅🏼", "🎁", "⭐"]; /* 1 */ emojis.push("🦌"); /* 2 */ emojis.splice(0, 2); /* 3 */ emojis = [...emojis, "🥂"]; /* 4 */ emojis.length = 0; const 关键字意味着我们不能 重定义 变量中的值,它 仅可读。而然,值本身
选择哪一个?
Posted on:2021年7月3日 at 22:33const teams = [ { name: "Team 1", members: ["Paul", "Lisa"] }, { name: "Team 2", members: ["Laura", "Tim"] } ]; function* getMembers(members) { for (let i = 0; i < members.length; i++) { yield members
输出什么?
Posted on:2021年7月3日 at 22:33const add = x => x + x; function myFunc(num = 2, value = add(num)) { console.log(num, value); } myFunc(); myFunc(3); 首先我们不传递任何参数调用 myFunc()。因为我们没有传递参数,num 和 value 获取它们各自的默认值:num 为 2, 而 value 为函数 add 的
以下哪一项会对对象 `person` 有副作用?
Posted on:2021年7月3日 at 22:33const person = { name: "Lydia Hallie", address: { street: "100 Main St" } }; Object.freeze(person); 使用方法 Object.freeze 对一个对象进行 冻结。不能对属性进行添加,修改,删除。 然而,它仅 对对象进行 浅 冻结,意味着只有 对象中的 直接 属性被冻结。如果属性是另一个 object,
以下哪一项会对对象 `person` 有副作用?
Posted on:2021年7月3日 at 22:33const person = { name: "Lydia Hallie" }; Object.seal(person); 使用 Object.seal 我们可以防止新属性 被添加,或者存在属性 被移除. 然而,你仍然可以对存在属性进行更改。
输出什么?
Posted on:2021年7月3日 at 22:33const handler = { set: () => console.log("Added a new property!"), get: () => console.log("Accessed a property!") }; const person = new Proxy({}, handler); person.name = "Lydia"; person.name; 使用 Proxy
怎样能在 index.js 中调用 sum.js 中的 sum 方法?
Posted on:2021年7月3日 at 22:33// sum.js export default function sum(x) { return x + x; } // index.js import * as sum from "./sum"; 使用符号 *,我们引入文件中的所有值,包括默认和具名。如果我们有以下文件: // info.js export const name = "Lydia"; export const age = 21
输出什么?
Posted on:2021年7月3日 at 22:31const emojis = ["🥑", ["✨", "✨", ["🍕", "🍕"]]]; console.log(emojis.flat(1)); 通过方法 flat, 我们可以创建一个新的, 已被扁平化的数组。被扁平化的深度取决于我们传递的值。在这个case里,我们传递了值 1 (并不必要,这是默认值),相当于只有第一层的数组才会被连接。即这个 case 里的 ['🥑'] and ['
输出什么?
Posted on:2021年7月3日 at 22:31const myPromise = Promise.resolve("Woah some cool data"); (async () => { try { console.log(await myPromise); } catch { throw new Error(`Oops didn't work`); } finally { console.log("Oh finally!"); } })
输出什么?
Posted on:2021年7月3日 at 22:31const randomValue = 21; function getInfo() { console.log(typeof randomValue); const randomValue = "Lydia Hallie"; } getInfo(); 通过 const 关键字声明的变量在被初始化之前不可被引用:这被称之为 暂时性死区。在函数 getInfo 中, 变量 randomValue 声
输出什么?
Posted on:2021年7月3日 at 22:31const spookyItems = ["👻", "🎃", "🕸"]; ({ item: spookyItems[3] } = { item: "💀" }); console.log(spookyItems); 通过解构对象们,我们可以从右手边的对象中拆出值,并且将拆出的值分配给左手边对象同名的属性。在这种情况下,我们将值 "💀" 分配给 spookyItems[3]。相当于我们正在篡
输出什么?
Posted on:2021年7月3日 at 22:31function getFine(speed, amount) { const formattedSpeed = new Intl.NumberFormat({ 'en-US', { style: 'unit', unit: 'mile-per-hour' } }).format(speed) const formattedAmount = new Intl.NumberFormat({ 'en-
输出什么?
Posted on:2021年7月3日 at 22:31const myFunc = ({ x, y, z }) => { console.log(x, y, z); }; myFunc(1, 2, 3); myFunc 期望接收一个包含 x, y 和 z 属性的对象作为它的参数。因为我们仅仅传递三个单独的数字值 (1, 2, 3) 而不是一个含有 x, y 和 z 属性的对象 ({x: 1, y: 2, z: 3}), x, y 和 z 有着各自的默
输出什么?
Posted on:2021年7月3日 at 22:31const add = x => y => z => { console.log(x, y, z); return x + y + z; }; add(4)(5)(6); 函数 add 是一个返回 返回箭头函数的箭头函数 的箭头函数(still with me?)。第一个函数接收一个值为 4 的参数 x。我们调用第二个函数,它接收一个值为 5 的参数 y。然后我们调用第三个函数,它接收一个值为 6
输出什么?
Posted on:2021年7月3日 at 22:31const name = "Lydia Hallie"; console.log(!typeof name === "object"); console.log(!typeof name === "string"); typeof name 返回 "string"。字符串 "string" 是一个 truthy 的值,因此 !typeof name 返回一个布尔值 false。 false ===
输出什么?
Posted on:2021年7月3日 at 22:30const config = { languages: [], set language(lang) { return this.languages.push(lang); } }; console.log(config.language); 方法 language 是一个 setter。Setters 并不保存一个实际值,它们的使命在于 修改 属性。当调用方法 setter, 返回 undefi
输出什么?
Posted on:2021年7月3日 at 22:30const groceries = ["banana", "apple", "peanuts"]; if (groceries.indexOf("banana")) { console.log("We have to buy bananas!"); } else { console.log(`We don't have to buy bananas!`); } 我们传递了一个状态 grocerie
输出什么?
Posted on:2021年7月3日 at 22:30let num = 1; const list = ["🥳", "🤠", "🥰", "🤪"]; console.log(list[(num += 1)]); 通过 += 操作符,我们对值 num 进行加 1 操作。 num 有初始值 1,因此 1 + 1 的执行结果为 2。数组 list 的第二项为 🥰,console.log(list[2]) 输出 🥰.
输出什么?
Posted on:2021年7月3日 at 22:30console.log(`${(x => x)('I love')} to program`) 带有模板字面量的表达式首先被执行。相当于字符串会包含表达式,这个立即执行函数 (x => x)('I love') 返回的值. 我们向箭头函数 x => x 传递 'I love' 作为参数。x 等价于返回的 'I love'。这就是结果 I love to program。
输出什么?
Posted on:2021年7月3日 at 22:29function* generatorOne() { yield ['a', 'b', 'c']; } function* generatorTwo() { yield* ['a', 'b', 'c']; } const one = generatorOne() const two = generatorTwo() console.log(one.next().value) console.log
输出什么?
Posted on:2021年7月3日 at 22:29let name = 'Lydia' function getName() { console.log(name) let name = 'Sarah' } getName() 每个函数都有其自己的执行上下文。 getName函数首先在其自身的上下文(范围)内查找,以查看其是否包含我们尝试访问的变量name。 上述情况,getName函数包含其自己的name变量:我们用let关键字和Sarah的值
这个函数干了什么?
Posted on:2021年7月3日 at 22:29JSON.parse() 使用JSON.parse()方法,我们可以将JSON字符串解析为JavaScript值。 // 将数字字符串化为有效的JSON,然后将JSON字符串解析为JavaScript值: const jsonNumber = JSON.stringify(4) // '4' JSON.parse(jsonNumber) // 4 // 将数组值字符串化为有效的JSON,然后将JS
下面代码输出什么?
Posted on:2021年7月3日 at 22:29const food = ['🍕', '🍫', '🥑', '🍔'] const info = { favoriteFood: food[0] } info.favoriteFood = '🍝' console.log(food) 我们将info对象上的favoriteFood属性的值设置为披萨表情符号“🍕”的字符串。字符串是原始数据类型。在JavaScript中,原始数据类型通过值起作
哪些方法修改了原数组?
Posted on:2021年7月3日 at 22:29const emojis = ['✨', '🥑', '😍'] emojis.map(x => x + '✨') emojis.filter(x => x !== '🥑') emojis.find(x => x !== '🥑') emojis.reduce((acc, cur) => acc + '✨') emojis.slice(1, 2, '✨') emojis.splice(1, 2,
输出什么?
Posted on:2021年7月3日 at 22:29console.log('❤️' === '❤️') 在内部,表情符号是unicode。 heat表情符号的unicode是“ U + 2764 U + FE0F”。 对于相同的表情符号,它们总是相同的,因此我们将两个相等的字符串相互比较,这将返回true。
输出什么?
Posted on:2021年7月3日 at 22:28const colorConfig = { red: true, blue: false, green: true, black: true, yellow: false, } const colors = ["pink", "red", "blue"] console.log(colorConfig.colors[1]) 在JavaScript中,我们有两种访问对象属性的方法:括号表示法或点表示
输出什么?
Posted on:2021年7月3日 at 22:28function compareMembers(person1, person2 = person) { if (person1 !== person2) { console.log("Not the same!") } else { console.log("They are the same!") } } const person = { name: "Lydia" } compareMemb
结果是什么?
Posted on:2021年7月3日 at 22:28Promise.resolve(5) 我们可以将我们想要的任何类型的值传递Promise.resolve,无论是否promise。 该方法本身返回带有已解析值的Promise (<fulfilled>)。 如果您传递常规函数,它将是具有常规值的已解决promise。 如果你通过了promise,它将是一个已经resolved的且带有传的值的promise。 上述情况,我们传了数字5,因此返回一个r
输出什么?
Posted on:2021年7月3日 at 22:28const one = (false || {} || null) const two = (null || false || "") const three = ([] || 0 || true) console.log(one, two, three) 使用||运算符,我们可以返回第一个真值。 如果所有值都是假值,则返回最后一个值。 (false || {} || null):空对象{}是一个
输出什么?
Posted on:2021年7月3日 at 22:28// 🎉✨ This is my 100th question! ✨🎉 const output = `${[] && 'Im'}possible! You should${'' && `n't`} see a therapist after so much JavaScript lol` []是一个真值。 使用&&运算符,如果左侧值是真值,则返回右侧值。 在这种情况下,左侧值[]是一个真值,
输出什么?
Posted on:2021年7月3日 at 22:28const name = "Lydia" console.log(name()) 变量name保存字符串的值,该字符串不是函数,因此无法调用。 当值不是预期类型时,会抛出TypeErrors。 JavaScript期望name是一个函数,因为我们试图调用它。 但它是一个字符串,因此抛出TypeError:name is not a function 当你编写了一些非有效的JavaScript时,会
输出什么?
Posted on:2021年7月3日 at 22:27const info = { [Symbol('a')]: 'b' } console.log(info) console.log(Object.keys(info)) Symbol类型是不可枚举的。Object.keys方法返回对象上的所有可枚举的键属性。Symbol类型是不可见的,并返回一个空数组。 记录整个对象时,所有属性都是可见的,甚至是不可枚举的属性。 这是Symbol的众多特性之一:除
输出什么?
Posted on:2021年7月3日 at 22:27class Person { constructor() { this.name = "Lydia" } } Person = class AnotherPerson { constructor() { this.name = "Sarah" } } const member = new Person() console.log(member.name) 我们可以将类设置为等于其他类/函数构造函数
输出是什么?
Posted on:2021年7月3日 at 22:27function nums(a, b) { if (a > b) console.log('a is bigger') else console.log('b is bigger') return a + b } console.log(nums(4, 2)) console.log(nums(1, 2)) 在JavaScript中,我们不必显式地编写分号(;),但是JavaScript引擎仍然在
输出什么?
Posted on:2021年7月3日 at 22:27function getItems(fruitList, ...args, favoriteFruit) { return [...fruitList, ...args, favoriteFruit] } getItems(["banana", "apple"], "pear", "orange") ... args是剩余参数,剩余参数的值是一个包含所有剩余参数的数组,并且只能作为最后一个参数。上
输出什么?
Posted on:2021年7月3日 at 22:27const person = { name: "Lydia", age: 21 } for (const [x, y] of Object.entries(person)) { console.log(x, y) } Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,上述情况返回一个二维数组,数组每个元素是一个包含键和值的数组: [['name','Lydia'],[
输出什么?
Posted on:2021年7月3日 at 22:27function giveLydiaPizza() { return "Here is pizza!" } const giveLydiaChocolate = () => "Here's chocolate... now go hit the gym already." console.log(giveLydiaPizza.prototype) console.log(giveLydiaChoc
输出什么?
Posted on:2021年7月3日 at 22:26let newList = [1, 2, 3].push(4) console.log(newList.push(5)) .push方法返回数组的长度,而不是数组本身! 通过将newList设置为[1,2,3].push(4),实际上newList等于数组的新长度:4。 然后,尝试在newList上使用.push方法。 由于newList是数值4,抛出TypeError。
输出什么?
Posted on:2021年7月3日 at 22:26class Person { constructor(name) { this.name = name } } const member = new Person("John") console.log(typeof member) 类是构造函数的语法糖,如果用构造函数的方式来重写Person类则将是: function Person() { this.name = name } 通过new来调用
输出什么?
Posted on:2021年7月3日 at 22:26// module.js export default () => "Hello world" export const name = "Lydia" // index.js import * as data from "./module" console.log(data) 使用import * as name语法,我们将module.js文件中所有export导入到index.js文件中,并且
输出什么?
Posted on:2021年7月3日 at 22:26function sum(num1, num2 = num1) { console.log(num1 + num2) } sum(10) 您可以将默认参数的值设置为函数的另一个参数,只要另一个参数定义在其之前即可。 我们将值10传递给sum函数。 如果sum函数只接收1个参数,则意味着没有传递num2的值,这种情况下,num1的值等于传递的值10。 num2的默认值是num1的值,即10。 num
输出什么?
Posted on:2021年7月3日 at 22:25console.log("I want pizza"[0]) 可以使用方括号表示法获取字符串中特定索引的字符,字符串中的第一个字符具有索引0,依此类推。 在这种情况下,我们想要得到索引为0的元素,字符'I'被记录。 请注意,IE7及更低版本不支持此方法。 在这种情况下,应该使用.charAt()
哪个选项是将 hasName 设置为 true 的方法(不能将true作为参数传递)?
Posted on:2021年7月3日 at 22:25function getName(name) { const hasName = // } 使用逻辑非运算符!,将返回一个布尔值,使用!! name,我们可以确定name的值是真的还是假的。 如果name是真实的,那么!name返回false。 !false返回true。 通过将hasName设置为name,可以将hasName设置为等于传递给getName函数的值,而不是布尔值true。 new
下面代码的输出是什么?
Posted on:2021年7月3日 at 22:25fetch('https://www.website.com/api/user/1') .then(res => res.json()) .then(res => console.log(res)) 第二个.then中res的值等于前一个.then中的回调函数返回的值。 你可以像这样继续链接.then,将值传递给下一个处理程序。
输出什么?
Posted on:2021年7月3日 at 22:24function checkAge(age) { if (age < 18) { const message = "Sorry, you're too young." } else { const message = "Yay! You're old enough!" } return message } console.log(checkAge(21)) const和let声明的变量是具有块级作
输出什么?
Posted on:2021年7月3日 at 22:24const person = { name: "Lydia", age: 21 } let city = person.city city = "Amsterdam" console.log(person) 我们将变量city设置为等于person对象上名为city的属性的值。 这个对象上没有名为city的属性,因此变量city的值为undefined。 请注意,我们没有引用person对象本身,
输出什么?
Posted on:2021年7月3日 at 22:24var status = "😎" setTimeout(() => { const status = "😍" const data = { status: "🥑", getStatus() { return this.status } } console.log(data.getStatus()) console.log(data.getStatus.call(this)) }, 0) th
输出什么?
Posted on:2021年7月3日 at 22:24function sayHi(name) { return `Hi there, ${name}` } console.log(sayHi()) 默认情况下,如果不给函数传参,参数的值将为undefined。 上述情况,我们没有给参数name传值。 name等于undefined,并被打印。 在ES6中,我们可以使用默认参数覆盖此默认的undefined值。 例如: function sayHi(
输出什么?
Posted on:2021年7月3日 at 22:24const list = [1 + 2, 1 * 2, 1 / 2] console.log(list) 数组元素可以包含任何值。 数字,字符串,布尔值,对象,数组,null,undeifned, 以及其他表达式,如日期,函数和计算。 元素将等于返回的值。 1 + 2返回3,1 * 2返回'2,'1 / 2返回0.5。
输出什么?
Posted on:2021年7月3日 at 22:24const myLifeSummedUp = ["☕", "💻", "🍷", "🍫"] for (let item in myLifeSummedUp) { console.log(item) } for (let item of myLifeSummedUp) { console.log(item) } 通过for-in循环,我们可以遍历一个对象自有的、继承的、可枚举的、非Symbol的属
以下是个纯函数么?
Posted on:2021年7月3日 at 22:23function sum(a, b) { return a + b; } 纯函数在相同的输入值时,需产生相同的输出,其输出的结果,与输入值以外的其他隐藏信息或状态无关,也和由I/O设备产生的外部输出无关。 纯函数不会产生副作用。 纯函数与副作用的定义可参考: https://zh.wikipedia.org/wiki/%E5%89%AF%E4%BD%9C%E7%94%A8_(%E8%AE%A1%E
输出什么?
Posted on:2021年7月3日 at 22:23const { name: myName } = { name: "Lydia" }; console.log(name); 当我们从右侧的对象解构属性name时,我们将其值Lydia分配给名为myName的变量。 使用{name:myName},我们是在告诉JavaScript我们要创建一个名为myName的新变量,并且其值是右侧对象的name属性的值。 当我们尝试打印name,一个未定义的变量
输出什么?
Posted on:2021年7月3日 at 22:23function addToList(item, list) { return list.push(item); } const result = addToList("apple", ["banana"]); console.log(result); push()方法返回新数组的长度。一开始,数组包含一个元素(字符串"banana"),长度为1。 在数组中添加字符串"apple"后,长度变为2,
输出什么?
Posted on:2021年7月3日 at 22:23async function getData() { return await Promise.resolve("I made it!"); } const data = getData(); console.log(data); 异步函数始终返回一个promise。await仍然需要等待promise的解决:当我们调用getData()并将其赋值给data,此时data为getData方法返回的
输出什么?
Posted on:2021年7月3日 at 22:23console.log(String.raw`Hello\nworld`); String.raw函数是用来获取一个模板字符串的原始字符串的,它返回一个字符串,其中忽略了转义符(\n,\v,\t等)。但反斜杠可能造成问题,因为你可能会遇到下面这种类似情况: const path = `C:\Documents\Projects\table.html` String.raw`${path}` 这将导
输出什么?
Posted on:2021年7月3日 at 22:22console.log("🥑" + "💻"); 使用+运算符,您可以连接字符串。 上述情况,我们将字符串“🥑”与字符串”💻“连接起来,产生”🥑💻“。
输出什么?
Posted on:2021年7月3日 at 22:21const name = "Lydia Hallie" console.log(name.padStart(13)) console.log(name.padStart(2)) 使用padStart方法,我们可以在字符串的开头添加填充。传递给此方法的参数是字符串的总长度(包含填充)。字符串Lydia Hallie的长度为12, 因此name.padStart(13)在字符串的开头只会插入1(13
输出什么?
Posted on:2021年7月3日 at 22:21console.log(Number(2) === Number(2)) console.log(Boolean(false) === Boolean(false)) console.log(Symbol('foo') === Symbol('foo')) 每个Symbol都是完全唯一的。传递给Symbol的参数只是给Symbol的一个描述。 Symbol的值不依赖于传递的参数。 当我们测试相等时
输出什么?
Posted on:2021年7月3日 at 22:21// index.js console.log('running index.js'); import { sum } from './sum.js'; console.log(sum(1, 2)); // sum.js console.log('running sum.js'); export const sum = (a, b) => a + b; import命令是编译阶段执行的,在代码运行
输出什么?
Posted on:2021年7月3日 at 22:21const value = { number: 10 }; const multiply = (x = { ...value }) => { console.log(x.number *= 2); }; multiply(); multiply(); multiply(value); multiply(value); 在ES6中,我们可以使用默认值初始化参数。如果没有给函数传参,或者传的参值为 "
输出是什么?
Posted on:2021年7月3日 at 22:21let num = 10; const increaseNumber = () => num++; const increasePassedNumber = number => number++; const num1 = increaseNumber(); const num2 = increasePassedNumber(num1); console.log(num1); console.lo
输出是什么?
Posted on:2021年7月3日 at 22:21const settings = { username: "lydiahallie", level: 19, health: 90 }; const data = JSON.stringify(settings, ["level", "health"]); console.log(data); JSON.stringify的第二个参数是 替代者(replacer). 替代者(replacer)可以
输出是什么?
Posted on:2021年7月3日 at 22:15const person = { name: "Lydia" }; Object.defineProperty(person, "age", { value: 21 }); console.log(person); console.log(Object.keys(person)); 通过defineProperty方法,我们可以给对象添加一个新属性,或者修改已经存在的属性。而我们使用defineP
输出是什么?
Posted on:2021年7月3日 at 22:15const user = { name: "Lydia", age: 21 }; const admin = { admin: true, ...user }; console.log(admin); 扩展运算符...为对象的组合提供了可能。你可以复制对象中的键值对,然后把它们加到另一个对象里去。在本例中,我们复制了user对象键值对,然后把它们加入到admin对象中。admin对象就拥有了这些键
输出是什么?
Posted on:2021年7月3日 at 22:14const set = new Set([1, 1, 2, 3, 4]); console.log(set); Set对象是独一无二的值的集合:也就是说同一个值在其中仅出现一次。 我们传入了数组[1, 1, 2, 3, 4],他有一个重复值1.以为一个集合里不能有两个重复的值,其中一个就被移除了。所以结果是 {1, 2, 3, 4}.
下面代码的输出是什么?
Posted on:2021年7月3日 at 22:14class Dog { constructor(name) { this.name = name; } } Dog.prototype.bark = function() { console.log(`Woof I am ${this.name}`); }; const pet = new Dog("Mara"); pet.bark(); delete Dog.prototype.bark; pe
输出是什么?
Posted on:2021年7月3日 at 22:14(() => { let x = (y = 10); })(); console.log(typeof x); console.log(typeof y); let x = y = 10; 是下面这个表达式的缩写: y = 10; let x = y; 我们设定y等于10时,我们实际上增加了一个属性y给全局对象(浏览器里的window, Nodejs里的global)。在浏览器中, window.
输出是什么?
Posted on:2021年7月3日 at 22:13function Car() { this.make = "Lamborghini"; return { make: "Maserati" }; } const myCar = new Car(); console.log(myCar.make); 返回属性的时候,属性的值等于 返回的 值,而不是构造函数中设定的值。我们返回了字符串 "Maserati",所以 myCar.make等于"Maser
输出是什么?
Posted on:2021年7月3日 at 22:13function greeting() { throw "Hello world!"; } function sayHi() { try { const data = greeting(); console.log("It worked!", data); } catch (e) { console.log("Oh no an error:", e); } } sayHi(); 通过throw语句
输出的是什么?
Posted on:2021年7月3日 at 22:13function getInfo(member, year) { member.name = "Lydia"; year = "1998"; } const person = { name: "Sarah" }; const birthYear = "1997"; getInfo(person, birthYear); console.log(person, birthYear); 普通参数都是
输出是什么?
Posted on:2021年7月3日 at 22:13[1, 2, 3].map(num => { if (typeof num === "number") return; return num * 2; }); 对数组进行映射的时候,num就是当前循环到的元素. 在这个例子中,所有的映射都是number类型,所以if中的判断typeof num === "number"结果都是true.map函数创建了新数组并且将函数的返回值插入数组。 但是,没有
num的值是什么?
Posted on:2021年7月3日 at 22:13const num = parseInt("7*6", 10); 只返回了字符串中第一个字母. 设定了 进制 后 (也就是第二个参数,指定需要解析的数字是什么进制: 十进制、十六机制、八进制、二进制等等……),parseInt 检查字符串中的字符是否合法. 一旦遇到一个在指定进制中不合法的字符后,立即停止解析并且忽略后面所有的字符。 *就是不合法的数字字符。所以只解析到"7",并将其解析为十进制的
输出是什么?
Posted on:2021年7月3日 at 22:13console.log(3 + 4 + "5"); 当所有运算符的 优先级 相同时,计算表达式需要确定运算符的结合顺序,即从右到左还是从左往右。在这个例子中,我们只有一类运算符+,对于加法来说,结合顺序就是从左到右。 3 + 4首先计算,得到数字7. 由于类型的强制转换,7 + '5'的结果是"75". JavaScript将7转换成了字符串,可以参考问题15.我们可以用+号把两个字符串连接起来。
输出是什么?
Posted on:2021年7月3日 at 22:13const person = { name: "Lydia", age: 21 }; for (const item in person) { console.log(item); } 在for-in循环中,我们可以通过对象的key来进行迭代,也就是这里的name和age。在底层,对象的key都是字符串(如果他们不是Symbol的话)。在每次循环中,我们将item设定为当前遍历到的key.所以一开
返回值是什么?
Posted on:2021年7月3日 at 22:12const firstPromise = new Promise((res, rej) => { setTimeout(res, 500, "one"); }); const secondPromise = new Promise((res, rej) => { setTimeout(res, 100, "two"); }); Promise.race([firstPromise, secondP
输出是什么?
Posted on:2021年7月3日 at 22:11function* generator(i) { yield i; yield i * 2; } const gen = generator(10); console.log(gen.next().value); console.log(gen.next().value); 一般的函数在执行之后是不能中途停下的。但是,生成器函数却可以中途“停下”,之后可以再从停下的地方继续。当生成器遇到yield
输出是什么?
Posted on:2021年7月3日 at 22:11[...'Lydia'] string 类型是可迭代的。扩展运算符将迭代的每个字符映射成一个元素。
输出是什么?
Posted on:2021年7月3日 at 22:11!!null !!'' !!1 null 是 falsy。 !null 的值是 true。 !true 的值是 false。 "" 是 falsy。 !"" 的值是 true。 !true 的值是 false。 1 是 truthy。 !1 的值是 false。 !false 的值是 true。
输出是什么?
Posted on:2021年7月3日 at 22:11(() => { let x, y try { throw new Error() } catch (x) { (x = 1), (y = 2) console.log(x) } console.log(x) console.log(y) })() catch 代码块接收参数 x。当我们传递参数时,这与之前定义的变量 x 不同 。这个 x 是属于 catch 块级作用域的。 然后,我们将块级作用域
输出是什么?
Posted on:2021年7月3日 at 22:11const numbers = [1, 2, 3] numbers[10] = 11 console.log(numbers) 当你为数组设置超过数组长度的值的时候, JavaScript 会创建名为 "empty slots" 的东西。它们的值实际上是 undefined。你会看到以下场景: [1, 2, 3, 7 x empty, 11] 这取决于你的运行环境(每个浏览器,以及 node 环境
输出是什么?
Posted on:2021年7月3日 at 22:10console.log(typeof typeof 1) typeof 1 返回 "number"。 typeof "number" 返回 "string"。
下面哪些值是 falsy?
Posted on:2021年7月3日 at 22:100 new Number(0) ('') (' ') new Boolean(false) undefined 只有 6 种 falsy 值: undefined null NaN 0 '' (empty string) false Function 构造函数, 比如 new Number 和 new Boolean,是 truthy。
输出是什么?
Posted on:2021年7月3日 at 22:10const a = {} const b = { key: 'b' } const c = { key: 'c' } a[b] = 123 a[c] = 456 console.log(a[b]) 对象的键被自动转换为字符串。我们试图将一个对象 b 设置为对象 a 的键,且相应的值为 123。 然而,当字符串化一个对象时,它会变成 "[object Object]"。因此这里说的是,a["[obj
输出是什么?
Posted on:2021年7月3日 at 22:10String.prototype.giveLydiaPizza = () => { return 'Just give Lydia pizza already!' } const name = 'Lydia' name.giveLydiaPizza() String 是内置的构造函数,我们可以向它添加属性。我只是在它的原型中添加了一个方法。基本类型字符串被自动转换为字符串对象,由字符串原型函数生成
输出是什么?
Posted on:2021年7月3日 at 22:10const obj = { a: 'one', b: 'two', a: 'three' } console.log(obj) 如果你有两个名称相同的键,则键会被替换掉。它仍然位于第一个键出现的位置,但是值是最后出现那个键的值。
输出是什么?
Posted on:2021年7月3日 at 22:10const obj = { 1: 'a', 2: 'b', 3: 'c' } const set = new Set([1, 2, 3, 4, 5]) obj.hasOwnProperty('1') obj.hasOwnProperty(1) set.has('1') set.has(1) 所有对象的键(不包括 Symbol)在底层都是字符串,即使你自己没有将其作为字符串输入。这就是为什么 obj
输出是什么?
Posted on:2021年7月3日 at 22:09var num = 8 var num = 10 console.log(num) 使用 var 关键字,你可以用相同的名称声明多个变量。然后变量将保存最新的值。 你不能使用 let 或 const 来实现这一点,因为它们是块作用域的。
cool_secret 可访问多长时间?
Posted on:2021年7月3日 at 22:09sessionStorage.setItem('cool_secret', 123) 关闭 tab 标签页 后,sessionStorage 存储的数据才会删除。 如果使用 localStorage,那么数据将永远在那里,除非调用了 localStorage.clear()。
输出是什么?
Posted on:2021年7月3日 at 22:09function getAge() { 'use strict' age = 21 console.log(age) } getAge() 使用 "use strict",你可以确保不会意外地声明全局变量。我们从来没有声明变量 age,因为我们使用 "use strict",它将抛出一个引用错误。如果我们不使用 "use strict",它就会工作,因为属性 age 会被添加到全局对象中了。
输出是什么?
Posted on:2021年7月3日 at 22:09function getAge(...args) { console.log(typeof args) } getAge(21) 扩展运算符(...args)会返回实参组成的数组。而数组是对象,因此 typeof args 返回 "object"。
输出是什么?
Posted on:2021年7月3日 at 22:09function checkAge(data) { if (data === { age: 18 }) { console.log('You are an adult!') } else if (data == { age: 18 }) { console.log('You are still an adult.') } else { console.log(`Hmm.. You don't ha
输出是什么?
Posted on:2021年7月3日 at 22:09function getPersonInfo(one, two, three) { console.log(one) console.log(two) console.log(three) } const person = 'Lydia' const age = 21 getPersonInfo`${person} is ${age} years old` 如果使用标记模板字面量,第一个参数的值总
输出是什么?
Posted on:2021年7月3日 at 22:09let number = 0 console.log(number++) console.log(++number) console.log(number) 一元后自增运算符 ++: 返回值(返回 0) 值自增(number 现在是 1) 一元前自增运算符 ++: 值自增(number 现在是 2) 返回值(返回 2) 结果是 0 2 2.
以下代码的输出是什么?
Posted on:2021年7月3日 at 22:08function sum(a, b) { return a + b } sum(1, '2') JavaScript 是一种动态类型语言:我们不指定某些变量的类型。值可以在你不知道的情况下自动转换成另一种类型,这种类型称为隐式类型转换(implicit type coercion)。Coercion 是指将一种类型转换为另一种类型。 在本例中,JavaScript 将数字 1 转换为字符串,以便函
输出是什么?
Posted on:2021年7月3日 at 22:08function Person(firstName, lastName) { this.firstName = firstName this.lastName = lastName } const lydia = new Person('Lydia', 'Hallie') const sarah = Person('Sarah', 'Smith') console.log(lydia) conso
输出是什么?
Posted on:2021年7月3日 at 22:08function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } const member = new Person("Lydia", "Hallie"); Person.getFullName = function () { return `${this.firstName
当我们这么做时,会发生什么?
Posted on:2021年7月3日 at 22:07function bark() { console.log('Woof!') } bark.animal = 'dog' 这在 JavaScript 中是可以的,因为函数是对象!(除了基本类型之外其他都是对象) 函数是一个特殊的对象。你写的这个代码其实不是一个实际的函数。函数是一个拥有属性的对象,并且属性也可被调用。
输出是什么?
Posted on:2021年7月3日 at 22:07let greeting greetign = {} // Typo! console.log(greetign) 代码打印出了一个对象,这是因为我们在全局对象上创建了一个空对象!当我们将 greeting 写错成 greetign 时,JS 解释器实际在上浏览器中将它视为 global.greetign = {} (或者 window.greetign = {})。 为了避免这个为题,我们可以使
输出是什么?
Posted on:2021年7月3日 at 22:07let a = 3 let b = new Number(3) let c = 3 console.log(a == b) console.log(a === b) console.log(b === c) new Number() 是一个内建的函数构造器。虽然它看着像是一个 number,但它实际上并不是一个真实的 number:它有一堆额外的功能并且它是一个对象。 当我们使用 == 操作符时,
哪一个是正确的?
Posted on:2021年7月3日 at 22:07const bird = { size: 'small' } const mouse = { name: 'Mickey', small: true } 在 JavaScript 中,所有对象的 keys 都是字符串(除非对象是 Symbol)。尽管我们可能不会定义它们为字符串,但它们在底层总会被转换为字符串。 当我们使用括号语法时([]),JavaScript 会解释(或者 unboxes)语句