1.下面哪几个和
[http://store.company.com/dir/page.html]
符合同源策略?( ) A. http://store.company.com/dir2/other.htm B. https://store.company.com/dir/secure.html C. http://store.company.com:81/dir/etc.html D. http://news.company.com/dir/other.html
答案:A 同源表明,同协议,同域名,同端口号 端口号:http默认为80/8080/3128/8081/9080,https默认443
2.关于DOMContentLoaded和load事件说法正确的是? A. DOMContentLoaded事件比load事件更早执行 B. load事件比DOMContentLoaded事件更早执行 C. 按监听代码从上到下先后执行 D. dom文档完全加载完后执行load事件
答案:A
在任何情况下,DOMContentLoaded的触发不需要等待图片等其他资源加载完成。当HTML部分被完全加载以及解析时,DOMContentLoaded事件会被触发,而不必等待样式表,图片或者子框架完成加载。 页面上所有资源(图片,音频,视频等)被加载以后才会触发load时间。
3.如何在 div 容器里展示
这几个字符? A. B. “ ” C. document.querySelector(‘div’).innerText = “ ” D. document.querySelector(‘div’).innerHTML = “ sssssss ”答案:C
innerHTML:设置或获取标签所包含的HTML与文本信息。(不含标签本身); innerText:设置或获取标签所包含的文本信息。(不含标签本身) outerHTML:设置或获取标签本身以及所包含的HTML与文本信息。(包含标签本身) outText:设置或获取标签本身以及所包含的文本信息。(包含标签本身)
4.以下是哪一组全是块级元素?
A. div i h2 li B. div p h1 ul C. li ul h3 span D. p h4 canvas em
答案: B 5. <div class="box box1 box2" style="color:#222">hello</div>, 这个div里面最终的字体颜色是什么? .box{ color:#999; }
.box{ color:#333 !important; }
.box2{ color:#666 }
A. #999 B. #222 C. #333 D. #666
6.以下不是box-sizing的属性是?
A. border-box B. auto C. content-box D. inherit
答案: B
7.以下不是CSS伪类选择器的是?
A. :first-child() B. :before C. :center D. :after
正确答案: C
8.‘-1 >>> 32 的值为( )’ A. -1 B. 1 C. 0 D. 2^32-1
正确答案: D
这个是带符号右移
这个是无符号右移 无符号右移运算符(>>>) 按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移(>>) 相同,但是对于负数来说不同。
正数
例:20 >> 2 1、首先转化为二进制,20的二进制为0001 0100 2、将二进制数向右移两位,高位补符号位(0),得到0000 0101 3、最后将二进制数转化成十进制数,0000 0101转化为十进制为5 所以,20 >> 2 = 5
负数
例:-20 >> 2 1、首先转化为二进制,20的二进制为1110 1100 //取反加1 20的二进制为0001 0100 取反得到1110 1011 加1后得到1110 1100 2、将二进制数向右移两位,高位补符号位(1),得到1111 1011 3、最后将二进制数转化成十进制数,1111 1011转化为十进制为-5 //取反 0000 0100 加1 0000 0101 因为是负数,也就是1000 0101也就是2的2次方加2的零次方 等于-5 所以,-20 >> 2 = -5
9.[1 < 2 < 3, 3 < 2 < 1] ( )
A. [true, true] B. [true, false] C. [false, true] D. [false, false]
正确答案: A
[1 < 2 < 3, 3 < 2 < 1]
1<2 => true true < 3 => true // true自动转换为1
3<2 => false false < 1 => true //false 自动转换为0
answer: [true, true]
10.[‘1’, ‘2’, ‘3’].map(parseInt) ( )
A. [1, 2, 3] B. [0, 1, 2] C. [NaN, NaN, NaN] D. [1, NaN, NaN]
正确答案: D
[‘1’, ‘2’, ‘3’].map((item, index) => { return parseInt(item, index) }) parseInt(‘1’, 0) // 1 默认十进制的1 parseInt(‘2’, 1) // NaN 1进制没有2 parseInt(‘3’, 2) // NaN,2进制逢2进1
ps 啥是parseInt parseInt(‘11’,2) //二进制的11 转换成十进制应该是 3 ppppps [‘10’,‘10’,‘10’,‘10’,‘10’].map(parseInt); // [10, NaN, 2, 3, 4] 意思是0(默认0是十进制)进制的十转换成十进制是多少 1进制的十转换成十进制是多少 二进制的10转换成十进制是多少
11.let a = { c:1 } let b = a a = 1 b.c = 2 a.c = (?)
A. 1 B. 2 C. undefined D. NaN
正确答案: C
let a = { c:1 } //a的作用域指向 {c:1} 这个地址 let b = a //b的作用域指向 {c:1} 这个地址 a = 1 // a指向的作用域发生改变,指向1,但是{c:1} 这个地址还存在 b.c = 2 //改变{c:1} 这个地址中c的值为2 a.c = (?) //a指向的地址已经发生改变,没有c这个变量,所以返回undefined
12.console.log(1); setTimeout(() => {console.log(2)}, 0); console.log(3); Promise.resolve(4).then(b => { console.log(b); }); console.log(5);
A. 1 2 3 4 5 B. 1 3 5 4 2 C. 1 4 2 3 5 D. 1 3 5 2 4
正确答案: B
console.log() -> 同步 promise -> 异步,微任务 setTimeout -> 异步,宏任务 执行顺序: 同步 > 异步,微任务 > 异步,宏任务
13.Math.abs(-6.666) 的结果是多少?
A. -6.666 B. 6 C. -6 D. 6.666
正确答案: D
Math.abs(x) 返回x的绝对值 Math.pow(x, power) 返回x的power次幂
Math.pow(…nums) 返回nums中每个数平方和的平方根
Math.sign(x) 返回表示x符号的1、0、-0或-1
Math.trunc(x) 返回x的整数部分,删除所有小数
Math.sqrt(x) 返回x的平方根
Math.cbrt(x) 返回x的立方根
Math.acos(x) 返回x的反余弦
Math.asin(x) 返回x的反正弦
Math.atan(x) 返回x的反正切
Math.cos(x) 返回x的余弦
Math.sin(x) 返回x的正弦
Math.tan(x) 返回x的正切
1.丢弃小数部分,保留整数部分
js:parseInt(7/2)
2.向上取整,有小数就整数部分加1
js: Math.ceil(7/2)
3,四舍五入. js: Math.round(7/2)
4,向下取整
js: Math.floor(7/2)
14.替换字符串 bilibili 替换字符串中所有的b变成大写B
A. ‘bilibili’.delete(‘b’, ‘B’) B. ‘bilibili’.replace(/b/g, ‘B’) C. ‘bilibili’.replace(‘b’, ‘B’) D. ‘bilibili’.toUpperCase()
正确答案: B
replace()第一个参数可以是正则表达式 /b/g的意思是:匹配所有的b字符
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
15.[1,2,3,4,5] 的数组的基础上 删除第一个 和 最后一位
A. [1,2,3,4,5].replace(1, -1) B. [1,2,3,4,5].reverse(1,-1) C. [1,2,3,4,5].toString(-1,1) D. [1,2,3,4,5].slice(1, -1)
正确答案: D
slice(1,-1) slice不会操作原数组,会返回一个新数组 。 表示从索引为0开始截取,-1表示截取到倒数第二个,并将这个新数组返回。
16.function setname(name){ this.name = name } setname.prototype.printName = function(){ console.log(this.name) } let a = new setname(“cc”) a.name = “dd” a.proto.name = “ee” a.proto.printName() // ? a.printName() // ?
A. ee dd B. cc dd C. ee cc D. ee Error
正确答案: A
首先定义了一个函数 setname()接下来定义了一个方法printname 调用new 方法生成对象传参 “cc” 此时a对象上面的name属性为cc
接下来通过a.name修改属性 此时a对象的name属性为 dd 最后修改通过a修改构造函数中的属性 --proto– 17.const players = [ {name: ‘UZI’, team: ‘RNG’, position: ‘ADC’}, {name: ‘theshy’, team: ‘IG’, position: ‘TOP’}, {name: ‘Metoer’, team: ‘BLG’, position: ‘Jungle’}, {name: ‘ADD’, team: ‘BLG’, position: ‘TOP’}, {name: ‘Scout’, team: ‘EDG’, position: ‘Middle’}, {name: ‘iBoy’, team: ‘EDG’, position: ‘ADC’}, {name: ‘Baolan’, team: ‘IG’, position: ‘Support’}, {name: ‘Xiaohu’, team: ‘RNG’, position: ‘Middle’}] 获取列表中战队名是BLG 位置上路的 选手对象?
A. players.filter(x=> x.position === ‘TOP’ && x.team === ‘BLG’) B. players.get(position=‘TOP’, team=‘BLG’) C. players.find(position=‘TOP’, team=‘BLG’) D. players.findOne(position=‘TOP’, team=‘BLG’)
正确答案: A
players.filter(item=>item.position === ‘TOP’ && item.team === ‘BLG’) [{name: “ADD”, team: “BLG”, position: “TOP”}]
players.find(item=> item.position===‘TOP’ && item.team === ‘BLG’) {name: “ADD”, team: “BLG”, position: “TOP”}
18.找出有序数组(从小到大排列)中和为sum的两个数,要求复杂度为O(n),找到一组即可
答案:
function solve (arr, target) { let i = 0; let j = arr.length - 1; let first, last; while (i < j) { first = arr[i]; last = arr[j]; const sum = first + last; if (sum === target) return [first, last]; else if (sum > target) j--; else i++; } return null; }19.**判断由"()[]{}"6种括号组成的字符串是否合法
所有括号必须闭合左括号必须在正确的位置闭合**1.利用 map 实现一一对应 2.利用栈
function IsValue(str) { let map = new Map([ ['(',')'], ['{','}'], ['[',']'] ]) let stack = []; for(let i = 0 ; i < str.length ; i ++) { if(map.has(str[i])) { // 在左边 stack.push(str[i]) } else { // 在右边 if(stack.length == 0) return false; let top = stack[stack.length - 1]; // 栈顶元素 if(map.get(top) == str[i]) { stack.pop() } else { return false; } } } return true; } while(line = readline()) { var str = line; print(IsValue(str)) }不利用其他函数,直接判断,简单容易理解
var str = readline(); var n = str.length; var arr = []; var j=0; for(var i=0;i<n;i++){ switch(str[i]){ case '(': arr[j++] = '('; break; case '[': arr[j++] = '['; break; case '{': arr[j++] = '{'; break; case ')': if(arr[j-1]=='('){ j--; }else{ i=n;//跳出 } break; case ']': if(arr[j-1]=='['){ j--; }else{ i=n;//跳出 } break; case '}': if(arr[j-1]=='{'){ j--; }else{ i=n;//跳出 } break; } } if(j==0){ console.log("true"); }else{ console.log("false"); }20.有n级台阶,每一步可以走1级或2级,问一共有多少种走法
使用数组保存变量。比使用递归节省时间。。。
function NumberOf1(number) { // write code here var arr = [1, 2] for (var i = 2; i < number; i++) { arr[i] = arr[i - 1] + arr[i - 2] } return arr[number - 1] }就是一道斐波那契数列的经典问题,学习算法基础递归的时候老师都有讲。
while (line = readline()) { var n = parseInt(line); var res = fibonacci(n); print(res); } function fibonacci(n) { // 递归基 if (n <= 1) { return 1; } // 递归计算实例 return fibonacci(n - 1) + fibonacci(n - 2); }共n个楼梯,第一次跳1阶,后面还有n-1,有n-1种跳法;第一次跳两个台阶,后面还有n-2,有n-2种跳法。所以递归方式是f(n-1)+f(n-2)
function getStairs(stair) { if(stair <= 0) { return0 } if(stair === 1) { return1 } if(stair === 2) { return2 } return getStairs(stair - 1) + getStairs(stair - 2) } conststair = parseInt(readline()) console.log(getStairs(stair))