前端面试题每日3题——2022-09-04
每日 3 题#
16 以下代码执行后,控制台中的输出内容为?#
let a = { n: 1 }; let b = a; a.x = a = { n: 2 }; console.log(a.x); console.log(b.x);
17 以下代码执行后,控制台中的输出内容为?#
let a = {}; let b = "123"; let c = 123; a[b] = "b"; a[c] = "c"; console.log(a[b]);
18 以下代码执行后,控制台中的输出内容为?#
function user(obj) { obj.name = "aaa"; obj = new Object(); obj.name = "bbb"; } let person = new Object(); user(person); console.log(person.name);
公众号【今天也要写bug】获取更多前端面试题
答案和解析#
16#
// 答案:undefined { n: 2 } // 考察赋值运算符 let a = { n: 1 }; let b = a; // b 指向 { n: 1 } a.x = a = { n: 2 }; // 首先找到 a.x 等待赋值,即对象 { n: 1 } 的属性 x // 然后计算赋值=右侧表达式:a = { n: 2 },将 a 赋值为一个新对象 // a 赋值为一个新对象不会影响 b // 赋值表达式本身的值为要赋值的值,所以 a = { n: 2 } 返回 { n: 2 } // 所以 { n: 1 } 的属性 x 被赋值为 { n: 2 } console.log(a.x); // a 被赋值为 { n: 2 },没有属性 x,故输出:undefined console.log(b.x); // b.x 即为 { n: 1 } 的属性 x,故输出:{ n: 2 }
17#
// 答案:c // 考察对象的属性名、键访问 // 对于对象 obj = { a: 1 } // obj.a 语法被称为“属性访问” // obj['a'] 语法被称为“键访问” // 在对象中,属性名永远是字符串 // 如果使用 string 意外的值作为属性名,那么它首先会被转换为字符串 let a = {}; let b = "123"; let c = 123; a[b] = "b"; // 此时 a => {'123':'b'} a[c] = "c"; // 此时 a => {'123':'c'} console.log(a[b]); // 输出 c
18#
// 答案:aaa // 考察引用类型 function user(obj) { // obj 指向 person 引用的对象{} obj.name = "aaa"; // obj person 引用的对象变为 {name:'aaa'} obj = new Object(); // obj 引用新对象,对 person 无影响 obj.name = "bbb"; // obj => {name:'bbb'},对 person 无影响 } let person = new Object(); // person => {} user(person); console.log(person.name); // person => {name:'aaa'}
作者:程序员既明
出处:https://www.cnblogs.com/bidong/p/16655168.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
微信公众号:【今天也要写bug】获取更多优质内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!