A. 数据类型分为基本数据类型和引用数据类型 B. JavaScript一共有8种数据类型 C. Object是引用数据类型,且只存储于堆(heap)中 D. BigInt是可以表示任意精度整数的基本数据类型,存储于栈(stack)中
C
逻辑判断
请选择结果为ture的表达式?
A. nullinstanceofObject B. null === undefined C. null == undefined D. NaN == NaN
C
NaN 不与任何值相等,包括它本身
下列代码结果为 true 的是?
A. Symbol.for('a') === Symbol.for('a') B. Symbol('a') === Symbol('a') C. NaN === NaN D. {} === {}
A
Symbol.for(key) 会在 symbol 注册表中找相应的 key,找到就返回,未找到就创建。
Symbol 为独一无二的值,不相等
NaN 不与任何值相等,包括它本身
{} 为引用类型,是两个独立的对象,存储的地址不同
根据如下变量,下列表达式中返回值为true的是
var a = 1; var b = []; var c = ''; var d = true; A. (a || b) === true B. (b && c) === true C. (c && d) === true D. (d || a) === true
D
|| 或运算,第一个为 true 就返回第一个的值,为 false 就返回第二个的值
&& 与运算,第一个为 true 就返回第二个值,为 false 就返回第一个的值
a || b --> 1、b && c --> ''、c && d --> ''、d || a --> true
1==true的返回值是true,这句话是否正确?
A. T B. F
A
下面代码输出为true的是?
A. console.log([] === []); B. console.log(undefined == 0); C. console.log(undefined == false); D. console.log(false == '');
D
浏览器环境下,以下打印结果为true的是
A. console.log("12" === 12) B. console.log (NaN === NaN) C. console.log (typeof(null) === typeof(window)) D. console.log ([1,2,3] === [1,2,3])
C
C选项都返回为 object
以下表达式,正确的是
A. Number('a') == Number('a') B. -1 == true C. 3 + '2' === 5 D. ![] == ''
D
Math
如何把 7.25 四舍五入为最接近的整数
A. Math.round(7.25) B. Math.ceil(7.25) C. round(7.25) D. Math.rnd(7.25)
A
下面哪个选项可以产生 0<=num<=10 的随机整数
A. Math.floor(Math.random()*6) B. Math.floor(Math.random()*10) C. Math.floor(Math.random()*11) D. Math.ceil(Math.random()*10)
C
注意:D永远取不到0,但能取到10
以下( )表达式产生一个0~7之间(含0,7)的随机整数
A. Math.floor(Math.random()*6) B. Math.floor(Math.random()*7) C. Math.floor(Math.random()*8)
C
字符串
split() 方法用于把一个字符串分割成字符串数组。
A. T B. F
A
String对象的哪个方法可以寻找子字符串并返回该子字符串位置
A. match() B. indexOf() C. search() D. concat()
BC
JSON
下面哪一个是JSON数据?
A. {name:"xiaoming",age,"student"} B. {"name":"xiaoming","age":"student"} C. {"xiaoming","student"} D. ["xiaoming","student"]
B
下面分别使用 JSON.stringify 方法,返回值 res 分别是
const fn = function(){} const res = JSON.stringify(fn) const num = 123 const res = JSON.stringify(num) const res = JSON.stringify(NaN) const b = true const res = JSON.stringify(b) A. 'function'、'123'、'NaN'、'true' B. undefined、'123'、undefined、'true' C. undefined、'123'、'null'、'true' D. undefined、'123'、'null'、undefined
// (1) const newNums = Array.from(newSet(nums)) // (2) const newNums = nums.filter((n, i) => { return nums.indexOf(n) === i }) // (3) const newNums = nums.forEach((n, i) => { return nums.indexOf(n) === i }) // (4) const newNums = nums.reduce((acc, n, i) => { return [].concat(acc, nums.indexOf(n) === i ? n : []) }) A. (1)、(2)、(3)、(4) B. (1)、(3)、(4) C. (1)、(2)、(4) D. (1)、(4)
C
正则
正则表达式 ^d+[^d]+ 能匹配下列哪个字符串?
A. 123 B. 123a C. d123 D. 123def
C
下面哪个不是RegExp对象的方法
A. test B. match C. exec D. compile
D
以下哪项可以去除变量str中的所有空格
A. str.replace(`/\s*/g,""`) B. str.replace(`/^\s|\s$/g,""`) C. str.replace(`/^\s*/, ""`) D. str.replace(`/(\s*$)/g, ""`)
A
其他
下列函数哪个不是JavaScript的全局函数
A. encodeURI B. parseFloat C. round D. eval
C
编写高性能JavaScript,以下描述错误的是
A. 遵循严格模式:"use strict" B. 将js脚本放在页面顶部,加快渲染页面 C. 将js脚本成组打包,减少请求,尽量减少使用闭包 D. 使用非阻塞方式下载js脚本,最小化重绘(repaint)和回流(reflow)
B
有关JavaScript中系统方法的描述,错误的是?
A. parseFloat方法:该方法将一个字符串转换成对应的小数 B. isNaN方法:该方法用于检测参数是否为数值型,如果是,返回true,否则,返回false。 C. escape方法: 该方法返回对一个字符串编码后的结果字符串 D. eval方法:该方法将某个参数字符串作为一个JavaScript执行题
B
下面列出的浏览器,无webkit内核的是()
A. chrome B. Safari C. 搜狗浏览器 D. Firefox
D
下列代码哪个能够实现获取形式为 2017-08-01 形式的日期( )?
// A var formatDate=getDate() // B var formatDate = newDate() // C var formatDate = function (date) { var y = date.getFullYear(); var m = date.getMonth() + 1; var d = date.getDate(); return y + '-' + m + '-' + d; }; // D var formatDate = function (date) { var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? '0' + m : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; return y + '-' + m + '-' + d; };
D
下面哪一项不能最小化重绘(repaint)和回流(reflow)
A. 需要对元素进行复杂的操作时,可以先隐藏(display:"none"),操作完成后再显示 B. 需要创建多个DOM节点时,使用DocumentFragment创建完后一次性的加入document C. 尽量避免用table布局(table元素一旦触发回流就会导致table里所有的其它元素回流) D. 尽量不要使用 css 属性简写,如:用border-width, border-style, border-color代order
D
JS深入
this
下列哪种方法不能改变this指向()
A. eval B. apply C. bind D. call
A
在JavaScript中下面选项关于this描述正确的是
A. 在使用new实例化对象时, this指向这个实例对象 B. 将对象的方法赋值给变量A。执行A()时 该方法中的this指向这个对象。 C. 在函数定义时,this指向全局变量 D. 在浏览器下的全局范围内,this指向全局对象
A
下面有关JavaScript中call和apply方法的描述,错误的是?
A. call与apply都属于 Function.prototype 的一个方法,所以每个function实例都有call、apply属性 B. 两者传递的参数不同,call函数第一个参数都是要传入给当前对象的对象,apply不是 C. apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入 D. call传入的则是直接的参数列表。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
B
作用域(闭包)
内存泄漏是 javascript 代码中必须尽量避免的,以下几段代码可能会引起内存泄漏的有()
// (1) functiongetName() { name = 'javascript' } getName() // (2) const elements = { button: document.getElementById('button') }; functionremoveButton() { document.body.removeChild(elements.button); } removeButton() // (3) let timer = setInterval(() => { const node = document.querySelector('#node') if(node) { clearInterval(timer) } }, 1000); A. (1)、(2)、(3) B. (2)、(3) C. (1)、(3) D. (1)、(2)
D
(2) 是如果一直不点击就会形成:没有被清理的DOM元素引用
那个操作不会造成内存泄露
A. 没有清理的DOM元素引用 B. 被遗忘的定时器 C. 事件侦听没有移除 D. 局部变量不用时,没有设为null
D
下列关于闭包理解错误的是
A. 增加一定的内存消耗 B. 使用不当可能会导致内存泄漏 C. 可以使用闭包模拟私有方法 D. 闭包会改动对象的原型链
D
原型与继承
JavaScript实现继承的方式,不正确的是:
A. 原型链继承 B. 构造函数继承 C. 组合继承 D. 关联继承
D
继承方式
原型链继承
构造函数继承
组合继承
寄生式继承
寄生式组合继承
所有对象都有原型
A. T B. F
B
null 没有
以下关于原型链的描述正确的是:
A. 通过原型链继承的属性和对象自己定义的属性等效 B. 通过原型链可以模拟对象的私有属性 C. 在对象上访问不存在的属性时,会依次遍历整条原型链 D. 所有 JavaScript 中的对象都是位于原型链顶端的 `Object` 的实例
C
其他
以下不属于前端数据存储方式的是?
A. jsonp B. cookie C. localStorage D. sessionStorage
A
DOM题
事件流
将A元素拖拽并放置到B元素中,B元素需要做哪项操作()?
A. event.preventDefault() B. event.prevent() C. event.drag() D. event.drop()
A
以下不支持冒泡的鼠标事件为( )?
A. mouseover B. click C. mouseleave D. mousemove
C
mouseenter、mouseleave都不支持事件冒泡
在javascript中,用于阻止默认事件的默认操作的方法是
A. stopDeafault() B. stopPropagation() C. preventDefault() D. preventDefaultEven()
Promise.all([]).then((res) => { console.log('all'); }); Promise.race([]).then((res) => { console.log('race'); }); A. all 和 race 都会被输出 B. all 和 race 都不会被输出 C. all 会被输出,而 race 不会被输出 D. all 不会被输出,race 会被输出
C
all 如果传入的迭代是空的,则返回一个已完成(already resolved)状态的 Promise。
race 如果传的迭代是空的,则返回的 promise 将永远等待。
以下方案中,不是用于解决回调陷阱的的是:
A. Promise B. Generator C. async D. Proxy
D
在 ECMAScript6 中,不属于promise的状态是:
A. Pending B. Pause C. Fulfilled D. Rejected
B
解构赋值
关于ES6解构表达式,描述正确的是()
let [a, b, c, d, e] = "hello"; A. e = "hello"; B. 其它都为undefined C. 当中 a = "h", b = "e"; D. 语法报错
C
多选题
JS基础
下面哪些数组方法会改变原数组
A. push B. concat C. splice D. map
AC
下面可以声明数字的js代码是
A. const a = 0xa1 B. const a = 076 C. const a = 0b21 D. const a = 7e2
ABD
以下属于操作符 typeof 的返回值的是:
(1) function (2) object (3) null (4) array (5) NaN (6) bigint (7) regexp (8) undefined A. (1)、(2)、(3)、(4)、(5)、(6)、(7)、(8) B. (1)、(2)、(3)、(8) C. (1)、(2)、(8) D. (1)、(2)、(6)、(8)
D
以下()结果等于字符串string
A. typeof'string' B. String('string').toString() C. 'string'.split('').sort().join('') D. (function(string){return string})('string') E. JSON.parse('{"string":"string"}').string
ABDE
下面的等式成立的是?
A. parseInt(46.8) == parseFloat(46.8) B. NaN !== NaN C. isNaN('abc') == NaN D. typeofNaN === 'number'
BD
以下哪些选项可以将集合A转化为数组?
A. Array.from(A) B. [].slice.apply(A) C. [...A] D. [].map.call(A, o => o)
ABCD
下列结果返回 true 的是
A. null == undefined B. null === undefined C. null === null D. NaN == null E. NaN === NaN F. Infinity + 1 !== Infinity
AC
JS深入
关于以下代码,说法正确的有哪些?
functionPerson() { } var person = newPerson();
A. 每一个原型都有一个constructor属性指向关联的构造函数。 B. 每一个对象都有一个prototype属性。 C. Object.getPrototypeOf(person) === Person.prototype D. person.constructor === Person
ACD
下列在 JS 时间循环机制中属于微任务(microTask)的是?
A. process.nextTick B. promise C. setTimeout D. setInterval
AB
ES6
以下关于let和const的说法中正确的是:
A. let声明的变量值和类型都可以改变 B. const声明的常量不可以改变 C. 两者都不存在变量提升,同时存在暂时性死区,只能在声明的位置后面使用 D. const可以先声明再初始化,可以后赋值
ABC
下面关于Promise说法正确的是(注意“返回结果”的意思包含成功或者失败)
A. Promise.all在所有给定的promise都fulfilled后才返回结果 B. Promise.race在给定的promise中,某个fulfilled后才返回结果 C. promise.then的回调函数中,可以返回一个新的promise D. 对于一个向后台获取数据已经产生结果的promise:p1,再次调用p1.then,不会去重新发起请求获取数据
A. document.body.style.['background-color'] = '#fff' B. document.body.style.setProperty('background-color', '#fff') C. document.body.style = 'background-color: #fff' D. document.body.style.fontSize = '14px'
<html> <body> <pid="demo"></p> <scripttype="text/javascript"> var x = 10; var y = "10"; document.getElementById("demo").innerHTML = Boolean(x == y); </script> </body> </html>
true
document.write的结果会是什么?
functionfuncA(x){ var temp = 4;
functionfuncB(y){ document.write( ++x + y + (temp--)); }
funcB(5); }
funcA(6)
16
alert的结果会是多少
var varArr = function(i,j,str) { return j == 0 ? str : varArr(i,--j,(str+= " " + i[j])); } var arr = newArray('apple','orange','peach','lime'); var str = varArr(arr,arr.length,""); alert(str);
var str = "a1b2c3"; str = str.GetNum(); alert(str);
'123'
下面程序的输出结果是多少?
functionsum(a, b) { return a + b; } sum(1, "2");
"12"
下面程序的输出结果是多少?
var str = "我非常喜欢编程"; str.length = 3; console.log(str);
"我非常喜欢编程"
我觉得是这种操作对字符串没用,但是对数组这样操作可以实现
下面程序的输出结果是多少?
let number = 0; console.log(number++); console.log(++number); console.log(number);
0、2、2
下面程序的输出结果是多少?
functionnums(a, b) { if (a > b) console.log('a is bigger') else console.log('b is bigger') return a + b } console.log(nums(4, 2)) console.log(nums(1, 2))
'a is bigger'、6
'b is bigger'、3
下面程序输出结果是多少?
functionside(arr) { console.log(arr) arr[0] = arr[2]; } functionfunc1(a, b, c = 3) { c = 10; side(arguments); console.log(a + b + c); } functionfunc2(a, b, c) { c = 10; side(arguments); console.log(a + b + c); } func1(1, 1, 1); func2(1, 1, 1);
functionFn1(name) { if(name){ this.name = name; } } Fn1.prototype.name="jack" let a = newFn1(); console.log('a:', a.name);
functionFn2(name) { this.name = name; } Fn2.prototype.name="jack" let b = newFn2(); console.log('b:', b.name);
'a:' "jack"、'b:' undefined
下面程序的输出结果是?
varFoo = (function() { var x = 0; functionFoo() {} Foo.prototype.increment = function() { ++x; console.log(x); }; returnFoo; })(); var a = newFoo(); a.increment(); a.increment(); var b = newFoo(); a.increment();
1、2、3
下面程序的输出结果是?
var name = 'Jay' functionPerson(name){ this.name = name; console.log(this.name) } var a = Person('Tom') console.log(name) console.log(a) var b = newPerson('Michael') console.log(b)
functionsayHello() { console.log(name); console.log(age); var name = "Tom"; let age = 18; } sayHello();
"Tom"、Uncaught ReferenceError: Cannot access 'age' before initialization
下面的程序i的打印结果分别是多少?
for (var i = 0; i < 3; i++) { setTimeout(_ => { console.log(i) }) }
for (let i = 0; i < 3; i++) { setTimeout(_ => { console.log(i) }) }
3 3 3、0 1 2
下面程序的输出结果是:
console.log(a); var a = 'a'; console.log(b); let b = 'b';
undefined、Uncaught ReferenceError: Cannot access 'b' before initialization
下面程序的输出结果是:
var foo = "Hello"; (function(){ var bar = " World"; alert(foo + bar); })(); alert(foo + bar);
"Hello World"、Uncaught ReferenceError: bar is not defined
下面程序的输出结果是:
var a = 10; (function () { console.log(a) a = 5 console.log(window.a) var a = 20; console.log(a) })()
undefined、10、20
下面代码的输出结果是:
const a = 10 functionrunFunction() { const a = 20 console.log('inside', a) } runFunction() console.log('outside', a)
'inside' 20、'outside' 10
请描述打印结果并说明原因
"use strict" var name = 'Jay' var person = { name: 'Wang', pro: { name: 'Michael', getName: function () { returnthis.name } } } console.log(person.pro.getName) var people = person.pro.getName console.log(people())
function () { returnthis.name } // 第二个,报错
下面程序的结果是:
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <script> var elements = document.getElementsByTagName("li"); for (var i=0;i<elements.length;i++){ elements[i].onclick =function(){ alert(i); }; } </script>
classPerson { constructor (name) { this.name = name; } greet () { console.log(`Hi, my name is ${this.name}`); } greetDelay (time) { setTimeout(() => { console.log(`Hi, my name is ${this.name}`); }, time); } }
varPerson = (function(){ functionPerson(name){ this._name = name } Person.prototype.greet = function(){ console.log(`Hi, my name is ${this._name}`); } Person.prototype.greetDelay = function(time){ var _this = this; setTimeout(() => { console.log(`Hi, my name is ${_this.name}`); }, time); } })()
标签模板
下面程序的输出结果是多少?
functiongetPersonInfo (one, two, three) { console.log(one) console.log(two) console.log(three) } const person = 'Lydia' const age = 21 getPersonInfo `${person} is ${age} years old`
['',' is ',' years old']、'Lydia'、21
相当于getPersonInfo(['',' is ',' years old'],'Lydia',21)
module
请写出index里面的输出结果
// module.js exportdefault () => "Hello world" exportconst name = "nowcoder" // index.js import * as data from"./module" console.log(data)
我不确定哈。{default: ‘hello world’, name: ‘nowcoder’}
有a.js和b.js两个文件,请写出b文件中代码的输出
// a.js let a = 1 let b = {} setTimeout(() => { a = 2 b.b = 2 }, 100) module.exports = { a, b }