前言:
今天大家对“js试题”大约比较珍视,看官们都想要知道一些“js试题”的相关内容。那么小编在网摘上汇集了一些关于“js试题””的相关资讯,希望咱们能喜欢,你们快快来学习一下吧!前言:
最近总结了一些自己做题过程中遇到的易错问题,附带解析,希望对大家有帮助。1.下面哪些执行结果为true()
A 'foo' == new function(){ return String('foo'); };
B 'foo' == new function(){ return new String('foo'); };
C [] == 0
D ![]
E !0
点击查看答案
答案:B C E
点击查看涉及到的知识点
1.new返回值
2.String()与 new String()区别
3.隐式类型转换
解析:
A 'foo' == new function(){ return String('foo'); };
String('foo') => 'foo'new function 的return会判断返回值是否为引用数据类型,如果不是引用数据类型会返回空对象{},所以new function(){ return String('foo'); }返回{}'foo' == {} ,{}进行隐式类型转换,{}调用valueOf方法返回{}对象,判断{}不是基本数据类型,继续调用toString()方法,返回'[object Object]'。'foo' == '[object Object]',返回false
B 'foo' == new function(){ return new String('foo'); };
new String('foo');返回String对象。'foo' == new String('foo'), new String('foo')调用自身valueOf方法,返回'foo''foo' == 'foo' 返回 true
C [] == 0
引用数据类型会先转换为String,然后再转换为number
数组会先调用自身toString()方法 [].toString(); => ''使用Number('')转为数字 Number('') => 00 == 0 => true
D ![]
将[]隐式转化为布尔值
Boolean([]) => true!true => false
E !0
Boolean(0) => false!false => trueTips:
在==比较时遵循以下原则
1. 如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;2. 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;3. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;4. 如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false;5. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象,则相等操作符返回 true;6. 在比较相等性之前,不能将 null 和 undefined 转成其他值。7. null 和 undefined 是相等的。2.以下哪些事件会在页面加载完成(onload)之前触发?
A readystatechange
B pageshow
C beforeunload
D DOMContentLoaded
点击查看答案
答案:A D
点击查看涉及到的知识点
1.渲染过程
解析
A readystatechange
document有个readyState属性来描述document的状态,当readyState发生变化时会触发readystatechange事件。
loading:文档加载中
interactive:文档加载完毕,此时同样会触发DOMContentLoaded事件
complete:文档以及所引入的图片等资源加载完毕,此时同样会触发load事件
B pageshow
当load事件触发完毕后会触发pageshow事件
C beforeunload
当dom卸载时会触发,浏览器刷新页面、跳转页面、关闭页面时会触发。
D DOMContentLoaded
当dom解析完毕,同步js、css加载完毕时触发,会早于load事件。
Tips:
页面加载渲染简易流程
html解析为DOM,css解析为CSSOM,合并css与dom生成渲染树,布局,并进行渲染
1.浏览器请求html
2.浏览器获取到html
3.浏览器解析html
4.解析到head标签,如果同步js则停止dom解析(等待js下载完毕并执行后继续dom解析),如果是css则不影响dom继续解析(但是影响dom渲染)。
5.进入body标签
如果只有dom则解析dom,同css树合并为渲染树,进行渲染。如果有外链js,如果是同步js则下载并执行js,此时dom暂停解析,等待js执行完毕后继续解析,解析后生成dom树,并渲染。如果有js也有css引入,同步js阻塞dom解析,dom等待js下载执行完,dom解析完毕后还需要等待css下载完成,然后dom与cssom合并为渲染树然后渲染。 6.当dom解析完毕
Tips:
浏览器遇到通过src引入外部js时,会先渲染已解析的dom
例:
引入外部js, 遇到script src时会先渲染已解析的domtest.jsvar i = 1000000000while(i>0){ i--}console.log("解析完成")html<h1>Hello</h1><script type="text/javascript" src="test.js"></script><h1>world</h1>执行时,页面会先显示Hello,等几秒后会显示world页面内写的js会阻塞dom解析与渲染<h1>Hello</h1><script type="text/javascript"> var i = 1000000000 while(i>0){ i-- } console.log("解析完成")</script><h1>world</h1>js执行完后才会显示 Hello world3.关于这段代码正确的结论是:()
var F=function(){};Object.prototype.a=function(){};Function.prototype.b=function(){};var f=new F();
A f能取到a,但取不到b
B f能取到a,b
C F能取到b,不能取到a
D F能取到a,不能取到b
点击查看答案
答案:A
点击查看涉及到的知识点
1.原型
解析:
一. f能访问那些
f的__proto__指向的是F构造函数的prototype。属性查找是通过原型链查找的。f.__proto__ = F.prototype ,F.prototype.__proto__ = Object.prototype,Object.prototype.__proto__ = null。f可以获取到a。
二. F能访问那些
F.proto = Function.prototype。所以F能访问到bFunction.prototype.proto = Object.prototype。所以F能访问a。结论,F能访问a跟b。4.以下结果里,返回 false 的是?
A [] == true
B !![]
C NaN == NaN
D null == undefined
点击查看答案
答案:A C
点击查看涉及到的知识点
1.隐式类型转换
解析:
A [] == true
如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;
[] == Number(true) => [] == 1[].toString() == 1 => '' == 1Number('') == 1 => 0 == 1false
B !![]
Boolean([]) => true!true => false!false => true
C NaN == NaN
如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false;
false
D null == undefined
null 和 undefined 是相等的。
true5.下面的代码将返回:
Number(null);
A Null
B 0
C undefined
D 1
点击查看答案
答案:B
点击查看涉及到的知识点
1.Number函数的用法
解析:
Number(null) => 0Number(undefined) => NaNNumber(123a) => NaN6.假设有如下代码,那么a(10)的返回结果是?( )
function a(a){ a^=(1<<4)-1; return a;}
A 5
B 10
C 15
D 16
点击查看答案
答案:A
点击查看涉及到的知识点
1.二进制转换
2.左移运算符
3.异或运算符
解析:
涉及到异或、二进制转换、
a^=(1<<4)-1 => a = a ^ ((1<<4) -1);带入参数 a = 10 ^((1<<4) -1);((1<<4) -1) 1<<<4 转换为二进制 1000010000 转换为十进制 => 2⁴ => 16((1<<4) -1) => 1510 ^ 15 10转化为二进制 => 101015转化为二进制 => 111110^15 => 101101 =>转化为10进制 2²+1 => 5返回5
Tips:
二进制转换为十进制:
除二取余,然后倒序排列,高位补零 例:
10转化为2进制1. 10%2 = 02. 5%2 = 13. 2%2 = 04. 1 = 1倒序排列:10107.假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果为:
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
A Value is define
B Value is undefine
C define
D undefine
E Value is define 或者 Value is undefine
F define 或者 undefine
G 其它选项都有可能
点击查看答案
答案:C
点击查看涉及到的知识点
1.运算符优先级
解析: 考察运算符优先级,+优先级高于三目运算,上面代码等价于
('Value is ' + (val != '0')) ? 'define' : 'undefine'8.运行以下程序,y和z的最终结果为:
<script> var m= 1, j = k = 0; function add(n) { return n = n+1; } y = add(m); function add(n) { return n = n + 3; } z = add(m); </script>
A 2,4
B 4,4
C 2,2
D 报异常
点击查看答案
答案:B
点击查看涉及到的知识点
1.函数提升
2.值传递
解析:
同名函数会相互覆盖,由于函数存在函数提升,后定义的函数会覆盖之前定义的函数,所以y,z调用的都是第二个add函数。传入函数的m因为是基本类型,在函数内修改不会影响外部的变量结尾:
在错题中寻找自己的知识薄弱点,巩固并完善自己的知识体系,建议收藏,经常看看,避免遗忘~
标签: #js试题