-
1 instanseof Number
1 instanceof Number //false
var a = new Number(1);
a instanceof Number // true
原因是:instanceof判断一个对象是否是另一个对象的实例,而数字1是基本数据类型,不是对象,
var a = new Number(1);是通过包装类Number把数字1转换成对象,你可以用typeof a,和typeof 1,看看他们返回的值 -
判断布尔值
console.log([0]==[0]) //false 两个数组的地址不一样
console.log([0]==0) //true [0]会先转换为原始值 即’0’ == 0
console.log({}==0) //false -
哪些能得到‘2020’
console.log(2020 .toString()) //2020
console.log(2020…toString()) //2020
//console.log(2020.toString()) //报错
console.log(2020.0.toString()) //2020 -
请问以下输出结果是什么?
const name = “sunng”;
age = 30
console.log(delete name)
console.log(delete age)
结果为:false,true
原因:因为delete可以删除对象属性,但它无法直接删除变量,也无法删除原型中的变量。此题中,name是变量,而age是window的属性。如果删除成功,delete将返回true,否则false。 -
JS中的全局函数
7个:escape(),eval(),isNan(),isFinite(),parseFloat(),parseInt(),unescape();注意:全局函数与window上的存在的方法如alert,setTimeout 不是一类注意区分。 -
var x = 4,
obj = {
x:3,
bar:function(){
var x = 2
setTimeout(function(){
var x = 1
alert(this.x)
},1000)
}
}
obj.bar() //4
原因:我写的是3,但答案是4。原因是主要看函数的直接调用者是谁,this就是谁!!!像这里setTimeout是属于window的,所以this指向window -
如何将100000转换为100,000这种格式的,也就是如何实现千位分隔符
function thousands(digit){
//let reg = /(?=(\B)(\d{3})+KaTeX parse error: Undefined control sequence: \d at position 71: … let reg = /(\̲d̲)(?=(\d{3})+)/g
console.log(String(digit).match(reg))
return String(digit).replace(reg,"$1,")
}
console.log(thousands(1627485090675)) -
资源预加载
subresource:可以用来指定资源是最高优先级的。
preload:preload草案建议允许始终预加载某些资源,不像prefetch有可能被浏览器忽略,浏览器必须请求preload标记的资源。
prerender:prerender是一个重量级的选项,它可以让浏览器提前加载指定页面的所有资源。
prefetch:当能确定网页在未来一定会使用到某个资源时,开发者可以让浏览器提前请求并且缓存好以供后续使用。prefetch支持预拉取图片、脚本或者任何可以被浏览器缓存的资源。
资源预加载:https://www.jianshu.com/p/966087809596 -
如何实现一个instanceof
instanceof用于判断引用类型,不能判断普通数据类型!
instanceof 用于判断某个对象是否是另一个对象(构造方法)的实例。instanceof会查找原型链,直到null如果还不是后面这个对象的实例的话就返回false,否则就返回true
function instanceOf(left, right) {
let leftValue = left.__proto__;
let rightValue = right.prototype;
while (true) {
if (leftValue === null) {
return false;
}
if (leftValue === rightValue) {
return true;
}
leftValue = leftValue.__proto__;
}
}
console.log(instanceOf([],Array))
console.log(instanceOf(function(){},Function)) //true
//推荐这一种
function instanceofFun(obj, con){
if(typeof con != 'function') throw new Error('instance error'); // 构造函数不是函数报错
if(!obj || (typeof obj != 'object' && typeof obj != 'object')) return false; // 没有实例或实例不是引用类型返回false
while (obj.__proto__){ // 最终obj.__proto__是nall的时候退出循环
if(obj.__proto__ == con.prototype) return true;
obj = obj.__proto__;
}
return false;
}
console.log(instanceofFun([], Array));//true
console.log(instanceofFun(function(){}, Function));//false
- const A = function(){this.value = 1}
const B = function(){this.value = 2}
const C = function(){this.value = 3}
const c = new C() //此时输出为 undefined ƒ (){this.value = 3}
A.prototype = new B()
C.prototype = new A()
//const c = new C() //此时输出为 1 ƒ (){this.value = 2}
console.log(c.proto.value,c.proto.constructor) - 判断以下代码段输出结果是什么
function C() {
let a = b = 0;//这个等价于b = 0,let a = b 请注意,b=0的前面是没有let的,这样的话就相当于 window.b=0; 这就意味着b始终是全局的,而a则根据作用域而定,可以是全局的,也可以是局部的
console.log(a,b);
a++;
return a;
};
C();
console.log(typeof a, typeof b); //undefined number