【前端面试题】JavaScript核心面试题解析
一、基础类型与引用类型区别
例题解析
题目:写出下方代码段的执行结果,并说明原因。
var s1 = "abc";
var s2 = new String(s1);
s1.color = "blue";
s2.color = "red";
console.log(s1 === s2, s1.color, s2.color);
答案:false, undefined, red
解析:
-
类型差异:
s1
是字符串字面量,属于基本数据类型(值类型)s2
是通过new String()
创建的对象,属于引用数据类型
-
比较结果:
s1 === s2
为false
,因为基本类型与引用类型比较永远不相等
-
属性赋值:
- 基本类型不能添加自定义属性,因此
s1.color
赋值无效,输出undefined
- 引用类型可以添加自定义属性,因此
s2.color
输出red
- 基本类型不能添加自定义属性,因此
总结:JavaScript中基本类型(string, number, boolean等)无法添加自定义属性,而引用类型(object, array, function等)可以。
二、事件委托应用
例题解析
题目:用JavaScript实现,鼠标点击页面中的任意标签,alert该标签的名称。
答案:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>事件委托示例</title><script>window.onload = function() {// 利用事件冒泡,在body上绑定事件document.body.onclick = function(e) {// 兼容IE事件对象e = e || window.event;// 获取触发事件的元素var target = e.target || e.srcElement;// 弹出标签名(大写)alert(target.tagName);}}</script>
</head>
<body><input type="button" value="按钮" /><div>div元素</div