一、关于setTimeout
console.log("first")
setTimeout(function() {
console.log("setTimeout")
}, 0);
new Promise(function executor(resolve) {
for( var i=0 ; i<10000 ; i++ ) {
i == 9999 && resolve();
}
}).then(function() {
console.log("then")
});
console.log("last");
写一下输出顺序:
first
last
then
setTimeout
二、es5继承
https://www.cnblogs.com/annika/p/9073572.html
三、写出下面几段代码的打印内容
(1)
var x = 10;
function fn(){
console.log(x);
}
function show(f){
var x = 20;
f();
}
show(fn);
答案:10
(2)
var fn = function(){
console.log(fn)
}
fn();
var obj = {
fn2:function(){
console.log(fn2);
}
}
obj.fn2();
答案
fn = function(){
console.log(fn)
}
console.log(fn2);报错
理解:默认指向window,而全局中没有fn2这个方法,所以报错。改成console.log(this.fn2)可以打印出fn2函数
(3)
var name = "The Window";
var object = {
name:"My Object",
getNameFunc:function(){
return function(){
return this.name;
}
}
}
console.log(object.getNameFunc()());
答案:The Window
函数内,this默认指向window
改成:
getNameFunc:function(){
return this.name;
}
则打印 My Object
(4)
var A = function(){}
A.prototype.n = 1;
var b = new A();
A.prototype = {
n:2,
m:3
}
var c = new A();
console.log(b.n,b.m,c.n,c.m);
答案:1 undefined 2 3
理解:A.prototype.n = 1;时,开辟一个内存块,该内存块内容为n=1,A.prototype指向该内存块。var b = new A();时,b的隐式原型链指向该内存块。
A.prototype = {
n:2,
m:3
}时,开辟一个内存块,该内存块内容为n:2,m:3,A.prototype指向该内存块。var c = new A();时,c的隐式原型链指向该内存块。
(5)
var F = function(){};
Object.prototytotype.a = function()
{
console.log('a');
}
Function.prototytotype.b = function()
{
console.log('b');
}
var f = new F();
f.a();
f.b();
F.a();
F.b();
答案:
f.a(); 打印a
f.b();报错
F.a(); 打印a
F.b();打印b
理解:原型链最终指向object
四、promise几种状态
promise对象有三种状态:pending(进行中) 、Resolved(已经完成)和Rejected(已失败)
五、null,undefined
console.log(null==undefined)
返回结果为true
ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。
但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?
可以使用下面的两种方法。
alert(null === undefined); //output "false"
alert(typeof null == typeof undefined); //output "false"
let foo = undefined
let foo1 = null
console.log(typeof foo) //undefined
console.log(typeof foo1) //object
六、数组的方法
concat() 连接两个或更多的数组,并返回结果
join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔
pop() 删除并返回数组的最后一个元素
push() 向数组的末尾添加一个或更多元素,并返回新的长度
unshift() 向数组的开头添加一个或更多元素,并返回新的长度
reverse() 颠倒数组中元素的顺序
shift() 删除并返回数组的第一个元素
slice() 从某个已有的数组返回选定的元素
sort() 对数组的元素进行排序 参数必须是个函数 arr_a.sort(function(a,b){return a-b})
splice() 插入 删除 替换 数组的元素。
toString() 把数组转换为字符串,并返回结果
七、数组插入数据的方法
push() 向数组的末尾添加一个或更多元素,并返回新的长度
unshift() 向数组的开头添加一个或更多元素,并返回新的长度
splice() 插入 删除 替换 数组的元素。
八、如何判断是否是一个数组
一、用 instanceof
instanceof是如何判断的?
表达式: A instanceof B
如果B函数的显式原型对象在A对象的原型链上, 返回true, 否则返回false
二、Array.isArray(value) ES5新增方法
三、Object.prototype.toString.call(vaule) == “[object Array]”
四、Array.prototype.isPrototypeOf(value)
九、for in,for of 区别
https://blog.csdn.net/q5706503/article/details/82950764
十、js的循环