1、代码的输出结果是
function add(){
var sum = 1 + 2;
console.log( sum );
}
console.log(sum) ;
答:报错
2、下列关于原型的说法错误的是 (C)
A. 原型可以节省内存空间
B. 构造函数中的prototype属性,它是一个对象,我们称之为原型
C . 原型有constructor属性,原型的constructor属性指向实例化对象
D..任何一个对象都有__proto__属性,实例的对象的__proto__属性指向构造函数原型
3、下列的哪一个表达式将返回值为假( B)
A.!(3<=1)
B.(4>=4)&&(5<=2)
C.(“a”==“a”)&&(“c”!=“d”)
D.(2<3)||(3<2)
4、如下代码中,想要在超小屏幕和小屏幕显示两列,在中屏幕和大屏幕显示三列, 三个div的class正确的写法是 (D)
item 1
item 2
item 3
5、== 和 === 区别?=== 和es6那个函数作用一样?
== 只比较数值
=== 比较数据类型
Object.is
6、输出n-m的随机数
答:公式:Math.floor(Math.random()*(max-min)+min)
Math.floor(Math.random()*(m-n)+m)
7、offset系列
offsetHeight : 本身的高度 + 上下边框 + 上下内边距
offsetWidth : 本身的宽度 + 左右边框 + 左右内边距
offsetLeft : 父元素没有定位时 :子元素到浏览器左侧的距离 (父元素的左外边距+父元素的左边框+子元素的左外边距)
父元素有定位时 : 子元素到父元素左侧的距离 (子元素的左外边距)
offsetTop : 父元素没有定位时 :子元素到浏览器上侧的距离 (父元素的上外边距+父 元素的上边框+子元素的上外边距)
父元素有定位时 : 子元素到父元素上侧的距离 (子元素的上外边距)
client 系列 :
clientHeight : 本身的高度 + 上下内边距
clientWidth : 本身的宽度 + 左右内边距
clientLeft : 左侧边框
clientTop : 上边框
scroll 系列 :
scrollHeight : 本身的高度 + 滚动条卷曲的长度
scrollWidth : 本身的宽度 + 滚动条卷曲的长度
scrollLeft : 滚动条卷曲X轴的长度
scrollTop : 滚动条卷曲Y轴的长度
8、
function fun(n, o) {
console.log(o);
return {
fun: function (m) {
return fun(m, n);
}
}
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
答:undefined 0 0 0
undefined 0 1 2
undefined 1 2 3
9、箭头函数和普通函数的区别:
答:
1、箭头函数没有prototype
(原型),所以箭头函数本身没有this
let a = () =>{};
console.log(a.prototype); // undefined
2、箭头函数的this
指向在定义的时候继承自外层第一个普通函数的this。下面栗子中在一个函数中定义箭头函数,然后在另一个函数中执行箭头函数。
let a,
barObj = { msg: 'bar的this指向' };
fooObj = { msg: 'foo的this指向' };
bar.call(barObj); // 将bar的this指向barObj
foo.call(fooObj); // 将foo的this指向fooObj
function foo() {
a(); // 结果:{ msg: 'bar的this指向' }
}
function bar() {
a = () => {
console.log(this, 'this指向定义的时候外层第一个普通函数'); //
}; // 在bar中定义 this继承于bar函数的this指向
}
this
指向定义时所在的外层第一个普通函数,跟使用位置没有关系。3、不能直接修改箭头函数的this指向。上个例子中的foo函数修改一下,尝试直接修改箭头函数的this指向。
let fnObj = { msg: '尝试直接修改箭头函数的this指向' };
function foo() {
a.call(fnObj); // 结果:{ msg: 'bar的this指向' }
}
10、如何在多个Promise执行完成之后做一些操作?多个Promise同时执行有一个执行完了就进行一些操作?
promise.all( ) promise.race( 数组, 回调函数)
11、默认导出和普通导出的区别:
1、默认导出只能导出一个,普通导出可以导出多个
2、普通导出可以改名字
12、打印结果: 1 2 5 3
const promise = new Promise((resolve, reject) => {
console.log(1);
resolve(3);
console.log(2);
reject(4)
})
promise.then((res) => {
console.log(res);
}).catch(err => {
console.log(err);
})
console.log(5)
13、Object.assign()
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
tips:在JavaScript中枚举属性简单来说就是指对象中的属性是否可以被遍历出来,是属性的enumerable值决定的
14、reverse(反转数组)
15、join('')将数组元素无缝拼接
16、split()主要是用于对一个字符串进行分割成多个字符串数组。标准形式为String [] strings = str.split("");
17、 attr()和prop()作用和区别
attr {
1.只能匹配到第一个元素相关的属性(标签上的元素)
2.设置属性的时候,是给所有匹配到的元素的相关属性添加新的属性;
}
prop {
1.智能匹配到第一个元素上的相关属性 (DOM上的属性)
2.设置属性的时候,是个所有匹配的语速添加相关属性
}
attr和prop不同 {
1.两者都可以获取固有属性;
2.prop()用于设置或获取指定DOM元素(指的是JS对象,Element类型)上的属性(property);
3.attr()是用于设置或获取指定DOM元素所对应的文档节点上的属性(attribute)。
编程:
要求 : 编写一个动物类,该类包含name的属性,和say的方法。 通过say方法可以打印动物说话了。编写一个Dog类继承动物类,要求该类中包含颜色的属性,该类重写say方法,要求打印父类的say方法里的内容,并且打印 动物颜色+动物名字+“叫了”。
class Animal {
constructor(name) {
this.name = name,
say => {
console.log('说话了');
}
}
}
class Dog extends Animal {
constructor(color, name) {
super(name)
this.color = color
this.say = function () {
return this.name + '叫了'
}
}
}
let dog1 = new Dog('黑白', '二哈')
console.log(`${dog1.color}的${dog1.name}${dog1.say()}`);