三道Javascript面试题:
- JS的数据类型有几种?
- 引用类型和基本类型的区别是什么?
- 写一个跨浏览器的事件处理程序?
前两个问题本质是JS的变量问题。
JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值。
基本类型的值源自以下五种基本数据类型:
- Undefined
- Null
- Boolean
- Number
- String
基本类型值和引用类型值具有以下特点:
- 基本类型值在内存中占据固定大小的空间,因此会被保存栈内存中。
- 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本。
- 引用类型的值是对象,会保存在队内存中。
- 包含引用类型值的变量实际上包含的不是对象本身,儿时一个指向该对象的指针。
- 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。
- 确定一个值是哪种基本类型可以使用
typeof
操作符,而确定一个值是哪种引用类型可以使用instanceof
操作符
JS中的事件
事件是JS中最重要的部分之一,深入了解事件的工作机制以及它们对性能的影响至关重要。
代码如下:
// 事件处理工具,跨浏览器兼容性
var EventUtil = {
addHandler: function(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent("on" + type, handler);
} else {
element["on" + type] = handler;
};
},
removeHandler: function(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.detachEvent) {
element.detachEvent("on" + type, handler);
} else {
element["on" + type] = null;
};
}
}
这两个方法首先都会检测传入的元素是否存在DOM2级方法。
如果存在DOM2级方法,则使用该方法:
传入事件类型、事件处理函数、false(表示冒泡)
如果存在IE的方法,则使用第二种:
事件类型必须加上”on”前缀。
最后一种使用DOM0方法【基本不会执行】。
传入的handler如果是匿名函数的话,无法被移除。
百度笔试:
===
运算符判断相等的流程是怎样的==
运算符判断相等的流程是怎样的- 闭包
- for in
- 原型和构造函数
- undefined和null
- 跨域
- 大题:
- 字符串的处理
- 编码的转换