分析:A选项 getElementsByClassName() 方法返回文档中所有指定类名的元素集合,作为 NodeList 对象。B选项 getElementsByTagName() 方法返回一个动态的包含所有指定标签名的元素的HTML集合HTMLCollection。 C选项 Document的方法 getElementById()返回一个匹配特定 ID的元素。D选项 该方法与 getElementById() 方法相似,但是它查询元素的 name 属性,而不是 id 属性。
// 16.以下 javascript 代码,在浏览器中运行的结果是(B)
var a = 100 < 0 || typeof(100 + '');
console.log(a);
// A. true
// B. string
// C. undefined
// D. false
分析:这道题目考察的是或运算符,前面的 100 < 0 的Boolean值是false,后面的typeof(‘100’)里面是字符串的拼接,最终的typeof返回的结果是"string"。然后Boolean(“string”)的返回值true,所以最终a的值是string。
// 19.下段代码的的显示结果是?(A)
var x = new Boolean(false);
if (x) {
alert('hi');
}
var y = Boolean(0);
if (y) {
alert('hello');
}
// A. hi
// B. hi hello
// C. hello
// D. 不显示
分析: var x = new Boolean(false);通过构造函数生成一个Boolean {false}的对象,对象转化为boolean值是真,所以后面的hi可以打印输出,但是0转化为boolean是假,所以说y后面的打印hello不可执行。
20.下面哪些执行结果为true?(B C E)
A. 'foo' == new function(){ return String('foo'); };
B. 'foo' == new function(){ return new String('foo'); };
C. [] == 0
D. ![]
E. !0
杂交方式的比较:引用值在和原始值进行比较的时候会调用valueof或者是tostring方法,当使用valueof返回的是一个引用值而不是原始值的时候,就会调用tostring方法进行判断。
分析:先分析CDE,C选项[]的valueof在调用之后依旧是一个数组,所以说要调用tostring方法,结果是""空字符串,接着空字符串在进行转化为数字0.0等于0所以说c选项是true。
D选项是c选项的反面将空数组的最终隐式结果取反之后,应该是true,E选项非0当然是真,因为0的布尔值是false。
关于A、B选项,经过验证可以看出来
A产生的是一个是一个空对象,而b产生的才是一个真正的字符串’foo’。
// 21.下面这段JS程序的执行结果是:(D)
var user = {
count: 1,
getCount: function () {
return this.count;
}
};
var func = user.getCount;
console.log(func());
// A. this.count
// B. 1
// C. 报错
// D. undefined
分析:分析代码可以看出来,func得到的是一个user中的函数getCount,那么最终输出的是func()执行的结果,返回的是this.count那么this的指向应该是window,输出的是window.count,所以应该是undefined。
// 26.以下代码执行后,a.x 和 b.x 的结果分别是?(C)
function A(x) {
this.x = x;
}
A.prototype.x = 1;
function B(x) {
this.x = x;
}
B.prototype = new A();
var a = new A(2),
b = new B(3);
delete b.x;
// A. 2, 3
// B. 2, 1
// C. 2, undefined
// D. 其他几项都不对
分析:最后输出a.x和b.x的时候进行分别分析。第一个a.x首先a是由构造函数A构造出来并且传入实际参数2,所以a.x的值肯定是2,因为本身有x这个属性,不需要到a的原型链上进行寻找。关于b.x,B.prototype = new A();b的原型链是a,但是 delete b.x;之后并没有x这个属性,但是 function B(x) {
this.x = x;
}隐式的声明了var b ,所以最终的结果是undefined。
// 28.以下代码,在浏览器中执行的结果是(D)。
var A = { n: 7777 };
var B = function () { this.n = 9999 };
var C = function () { var n = 8888 };
B.prototype = A;
C.prototype = A;
var b = new B();
var c = new C();
console.log(c.n,A.n);
A.n ++;
console.log(b.n);
console.log(c.n);
// A. 9999 8889
// B. 10000 8888
// C. 7778 8889
// D. 9999 7778
分析:首先由于B.prototype = A; C.prototype = A;BC的原型都是A,但是var B = function () { this.n = 9999 };this直接指向b,所以在A.n ++;的时候并没有对B造成影响,所以B仍然是9999,但是我们在A.n++之前 console.log(c.n,A.n);发现
所以说这里的c.n,A.n是同一个值,所以最后的结果是7778.