选择题
display 属性的常用值不包括?
Answer(C)
A. inline
B. block
C. hidden
D. none
以下代码运行的结果是?
Answer(B)
function changeObjProperty(o) {
o.siteUrl = “http://www.baidu.com”
o = new Object()
o.siteUrl = “http://www.google.com”
}
let webSite = new Object();
changeObjProperty(webSite);
console.log(webSite.siteUrl);
A. http://www.google.com
B. http://www.baidu.com
C. null
D. [object Object]
[typeof null, null instanceof Object] 这些类型的结果是
Answer(A)
A. [“object”, false]
B. [null, false]
C. [“object”, true]
D. other
下列说法正确的是
Answer(AB)
A. 样式文件的加载会阻塞脚本的执行
B.iframe 会阻塞主页面的 load 事件
C.<audio>、<img> 中的资源下载会阻塞页面解析
D. 页面文档完全加载并解析完毕之后会触发 DOMContentLoaded 事件
下列说法正确的是
Answer(ACD)
A. requestAnimationFrame(foo) 确保使浏览器在下一次重绘之前调用 foo 方法
B. 在 addEventListener 的处理方法中使用 e.preventDefault() 可以阻止事件冒泡
C. 把 <script> 标签的引入放在文档末尾可以确保脚本下载和执行均在文档解析完成后发生
D. 多个 <script> 标签使用 defer 属性引入脚本时,可以确保脚本的执行是按照其被引入的顺序的
问答题
举例 JS 3 种强制类型转换和 2 种隐式类型转换?
Answer
强制类型转换:parseInt、parseFloat、Number、String
隐式类型转换:== + –
如果我们在控制台中运行 demo 或 demo2 函数,是否会导致堆栈溢出或页面卡死?
function demo() {
setTimeout(demo, 0)
}

function demo2() {
return Promise.resolve().then(demo2)
}
Answer
demo 不会,setTimeout 的作用是等待给定的时间后为它的回调产生一个新的宏任务;demo2 会,如果在微任务执行期间微任务队列加入了新的微任务,会将新的微任务加入队列尾部,之后也会被执行

什么是跨域?如何解决?
Answer
跨域限制是浏览器特有的行为(服务端不存在),出于安全考虑,浏览器不允许脚本获取其他域下资源
同源:协议、端口、域名(子域之间也存在跨域)三者完全相同,才不会产生跨域问题
解决跨域问题
1.反向代理: 通过同源服务端进行请求代理
2.CORS: 服务端设置header Access-Control-Allow-Origin、Access-Control-Allow-Headers、Access-Control-Allow-Methods
3.JSONP: 主要利用script标签开放策略,让服务器端返回可执行的Javascript函数(不常用且只能作用于get请求)
Coding
reverseLowerUpper
/**
* @description 使用 javascript 实现 reverseLowerUpper 方法,对字符串进行大小写反转
* @param {String} 待处理的字符串
* @returns {String} 处理后的字符串
*
* @example
* reverseLowerUpper(\’AbC\’) // return \’aBc\’
* reverseLowerUpper(\’ZZa\’) // return \’zzA\’
*/
Test Case
describe(\’reverseLowerUpper\’, () => {
it(\’test AbcDefGh\’, () => expect(reverseLowerUpper(\’AbcDefGh\’)).to.be.equal(\’aBCdEFgH\’))
it(\’test Notes\’, () => expect(reverseLowerUpper(\’Notes\’)).to.be.equal(\’nOTES\’))
})
preorderTraversal
/**
* @description 使用 javascript 实现 preorderTraversal 方法,进行二叉树先序遍历
* @param {Object} 待处理的二叉树结构
* @returns {Array} 遍历后结果
* @example preorderTraversal({
* val: 1,
* left: null,
* right: {
* val: 2,
* left: { val: 3, left: null, right: null },
* right: null,
* },
* }) // return [1, 2, 3]
*/
Test Case
describe(\’preorderTraversal\’, () => {
const tests = [
{
input: {
val: 1,
left: null,
right: {
val: 2,
left: { val: 3, left: null, right: null },
right: null,
},
},
output: [1, 2, 3],
},
{
input: {
val: 1,
left: null,
right: {
val: 2,
left: null,
right: {
val: 3,
left: { val: 4, left: null, right: null },
right: null,
},
},
},
output: [1, 2, 3, 4],
},
{
input: {
val: 1,
left: {
val: 2,
left: null,
right: { val: 3, left: null, right: null },
},
right: {
val: 4,
left: null,
right: { val: 5, left: null, right: null },
},
},
output: [1, 2, 3, 4, 5],
},
]

tests.forEach((test) => {
it(`test ${test.input}`, () => expect(preorderTraversal(test.input)).to.deep.equal(test.output))
})
})

版权声明:本文为webztz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/webztz/p/14924128.html