20.11.15.下列表达式你觉得那个会报错(A)
A.1 ++;
B.1…toString()
C.NAN.toString();
D.typeof money.
解析:1…toString() == “1”;(由于要判定第一个点是调用还是方法会产生误解,故数字的话是num…toString() 两点调用方法),NaN.toString() == “NaN”;typeof money == “undefined”;
20.11.16.下列关于this指向说法不正确的是(B)
A.call 和 apply 在参数中有区别,后者采用数组传参.
B.call 函数会返回一个函数。
C.bind后的函数this指向是确定的。
D.call函数在执行的时候改变this指向。
解析:this 谁调用指向谁 call与apply的第一个参数都为this的指向,call后面的参数为传入的参数列表,apply为参数的数组.
20.11.17下列代码的执行结果?
var obj = {
name:'obj',
}
var bar = {
name:'bar',
show:function () {
var name = 'foo';
console.log(this.name);
}
}
bar.show.call(obj);
// 答案 'obj'
20.11.18下列代码执行的结果?
let value = 'web';
function bar() {
let value = 'duyi';
function foo() {
console.log(value);
}
return foo;
}
bar()();
// duyi
20.11.19下列代码执行后a的值与b的值分别是多少
let a = {n:1};
let b = a;
a.m = a = {m:2};
console.log(a);
console.log(b);
//a : {m:2};
b:{m:{m:2},n:1};
解析: a.m = a = {m:2}; 运算·过程,自右向左,// a -->{m:2},前面a.m == {n:1}.m 增添一个属性,指向未变,
算出 结果b : {m:{m:2},n :1}
20.11.20下列代码执行输出结果是什么?
function Foo() {
}
Foo.prototype = {value:"bar"};
let foo = new Foo();
console.log(foo.constructor);
// Object -- 对象
解析: Foo,实例是谁构建的,构造函数就是谁。constructor 是原型链上的属性,foo.constructor 指向原型链上的对象。
20.11.21下列代码执行输出的结果是什么?
function Person() {
this.name = "bar";
return true;
}
let a = new Person();
console.log(a);
// {name:"bar"}
解析:构造函数中,大驼峰命名法,return 如果返回ture flase number 等原始值,自动忽略,如果返回的是一个对象,就以返回的对象为值。 原始数据类型:Number String null boolean Symbol Undefined。
20.11.22下列代码执行输出的结果是什么?
let num = 4;
num.length = 3;
// 包装类的过程,变成数字类型的的对象-->new Number(num).lenth = 3;
console.log(num.length);
//对应的包装类函数过程是独立的.
// undefined
解析:原始值:number ,string ,Booleam 都有对应的包装类对象。
20.11.23 你知道Javascript中最大的安全整数吗?
max -->Number.MAX_SAFE_INTEGER
min -->Number.MIN_SAFE_INEGER
// 1.超出这个数计算就不准确了。 -->Number.MAX_SAFE_INTEGER +1 == Number.MAX_SAFE_INTEGER +2 -->true
// 2.该数为2的53次方-1 --> Math.pow(2,53) - 1;
20.11.24Javascript中把非数字转化成数字的方式有哪些?
Number
parseInt
+
-
Math对象
20.11.25JavaScript创建数组的方式有哪些?
new Array()
[]
let arr = new Array(10) // 10是数组长度
let arr = new Array(1,2,3,4); // 数组元素
let arr2 = [1,2,3];
20.11.26JavaScript 中注释存在几种,都是什么?
2种
1.单行注释 -->//
2.多行注释-->/* */
20.11.27 手写圣杯模式
function inherit(target,origin) {
function F() {};
let f = new F();
target.prototype = f;
target.prototype.constructor = target;
}
20.11.28下列代码输出是什么结果?
a = 10;
let a = 10;
// 报错
20.11.29下列代码输出的结果是什么?
function a() {
console.log('a');
}
function b() {
console.log('b');
}
true && a();
false || b();
// 'a' 'b'
20.11.30你知道哪些遍历数组的方式吗?
let arr = [1,2,3,4,5];
// 遍历下标
for(let i = 0; i < arr.length;i ++) {
console.log(arr[i]);
}
// for in 遍历对象 遍历下标
for(let index in arr) {
console.log(arr[index]);
}
// ES5 forEach
arr.forEach(function (item,index,self){
console.log(self);
})
// ES6: for of (具有迭代器接口的对象进行遍历)
for(let i of arr) {
console.log(arr[i]);
}
20.12.01下列代码的输出结果是什么?
function fn1() {
let a = 'fun;'
}
function fn2(){
return;
}
let foo = fn1();
let bar = fn2();
console.log(foo,bar);
// undefined undefined
解析:没有明确返回值的函数,返回值是undefined,直接return 的返回值也是undefined。
20.12.02如何把一个对象的属性合并到另一个对象上?
let obj1 = {
name:'ljy',
age:18
}
let obj2 = {
name:'zbt',
value:'666'
}
for(let prop in obj2) {
obj1[prop] = obj2[prop];
}
let item = Object.assign({},obj1,obj2);
console.log(item);
// 遍历
// Object.assign
20.12.03判断字符串或数组中是否存在某个元素有哪些方法?
let arr = [1,2,3];
let str = '234'
console.log(arr.indexOf(4));
console.log(str.indexOf('34'))
console.log(arr.includes(2));
console.log(str.includes('234'))
答案
// String.prototype.indexOf
// Array.prototype.indexOf
// ES5中的方法
// String.prototype.includes
// Arayy.prototype.includes
20.12.04下列代码的输出结果是什么?
let time1 = "2019-02-14 21:00:00";
let time2 = "2019-05-01 09:00:00";
console.log(time1>time2);
// false
20.12.05如何把字符串按照特定要求补全至指定长度
例如'123' 补全到长度为6 => '000123'
或者 '123' 用ab填补 ,补长度为8'123ababab'
console.log('123',padStart(6,'0'));
console.log('123'.padEnd(8,'ab'));
//答案
String.prototype.padStart
String.prototype.padEnd
20.12.06如何优雅地获取数组中的最大值
let arr = [1,2,3,4,5,6];
console.log(Math.max.apply(null,arr));
console.log(Math.max(...arr)); // 扩展运算符
// 答案
Math.max.apply(null,arr);
// 更优雅
Math.max(...arr);
20.12.07如何清空数组和截断数组
清空:arr.length = 0;
截断:arr.length = n; // n 是截断位置
2020.12.08下列代码的输出结果是什么?
let arr = [1,'' ,0,NaN,undefined,false].filter(Boolean);
console.log(arr)
// true false true false false false
//let arr = [1,2,3].filter(function(index,item,that){
// return index%2;
// })
// console.log(arr)
解析:filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
2020.12.09.img标签的title和alt是什么,起到什么作用?
<img src="(图片地址)" title="我提示你了" alt="这里曾经是一张图片">
title-->图片提示符
alt-->图片占位符
2020.12.10如何检查元素是否具有指定元素的类名?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="a aa b c ad" id="demo"></div>
<script>
// 封装函数
let div = document.getElementById('demo');
function hasClass(el,className) {
return el.classList.contains(className);
}
console.log(hasClass(div,'aa'))
</script>
</body>
</html>
2020.12.12 Object.is() 与===区别是什么?
// NaN === NaN // false
// +0 === -0 // true
// object.is(NaN,NaN); //true
// object.is(+0,-0); // false
解析:object.is()是es6的语法它更加符合数学逻辑。
2020.12.13 substring 与slice的区别?(百度面试题)
解析:substring 与 slice 都是字符串截取功能,不同在于substring end < start 与 end 会交换
slice end < start 返回为空;
substring end ,start小于0,从字符尾串部分记。