解释一下为何[ ] == ![ ] // ---> true 首先看一张图 ![ ] 是 false原式:[ ] == false根据第八条,false通过tonumber()转换为0原式:[ ] == 0根据第十条,[ ]通过ToPrimitive()转换为 原式: == 0根据第六条原式:0 == 0 尝试实现newfunction ObjectClass() {//对象console.log(arguments[0])}ObjectClass.prototype.constructor = ObjectClassfunction create() {// 创建一个空的对象var obj = {}// 获得构造函数var _constr...
目录 1、js的数据类型2、null和undefined的区别3、闭包(必问)4、谈谈异步编程5、let 和 const 以及 var 的区别6、call()、apply()、bind()的区别7、== 与=== 区别8、防抖和节流的区别8.1 原生编程9、使用new调用函数的时候,会执行怎样的流程9.1 原生编程10、解释一下js中的原型、原型链11、如何判断数据类型12、列举强制类型转换和隐式类型转换13、请讲述一下事件委托 / 事件代理13.1 原生编程14、addEventListener和onClick的区...
1、js数据类型 基本数据类型:undefined、null、number、boolean、string、symbol引用数据类型:object(function、array、date ) 2、js数据类型的转换 转换为布尔值-Boolean()转换为数字-Number() parseInt() parseFloat()转换为字符串-String() toString()null和undefined没有.toString()方法 3、js数据类型的判断 typeof:对于原始数据类型来说,除了null都可以显示正确的类型— type 2instanceof:可以争取的判断对象的类型— i...
究竟是怎么样的一道面试题,能让我拿出来说说呢?下面请看代码:function fun(a,b) { console.log(b) return { fun: function(c) { return fun(c,a); } }; }var d = fun(0); d.fun(1); d.fun(2); d.fun(3);var d1 = fun(0).fun(1).fun(2).fun(3);var d2 = fun(0).fun(1); d2.fun(2); d2.fun(3); 复制代码如何判断两种函数的方法呢?可以用fn.name来判断,如果有name就是具名函数,如果没有na...
例子: 只是说排好序 并没有说两个数组都是升序或者是降序var ar1=[2,3,5,8,9]; var arr2=[10,7,4,2];将arr2 拼接到 arr1 中 按照 升序排列 相同的元素不去重哦 以前把 我们会用es5得方式进行 解决 又是判断两个的长度又是啥的 还是比较麻烦的 这里就不说es5的方式了var arr1=[2,3,5,8,9]; var arr2=[10,7,4,2]; function getConcat(arr1,arr2){return [...arr1,...arr2].sort((a,b)=>{return a-b;}) } var a=getConcat(arr1,arr2)...
最近在写【重拾前端】系列,下面有几个快速通道,大家自取 【重识前端】原型/原型链和继承 【重识前端】闭包与模块 【重识前端】全面攻破this 【重识前端】一次搞定JavaScript的执行机制 【重识前端】什么是BFC、IFC、GFC 和 FFC 【重识前端】深入内存世界 【重识前端】暴走的异步编程 前言 老规矩,还是先了解一下什么是异步。异步其实是一个相对比较高级的一个概念。 通常来说,程序都是顺序执行,同一时刻只会发生一件事。如果一...
JS面试题:实现a1&&a2&&a==3 返回true 思路: 重写valueOf()方法 利用隐式转换时,会调用valueOf()方法,来实现对其值的++操作 valueOf的意思是返回最适合该对象类型的原始值,而toString则是将在该对象类型的原始值以字符串形式返回。 var colors = ["red", "blue", "green"]; // 创建一个包含3 个字符串的数组 alert(colors.toString()); // red,blue,green alert(colors.valueOf()); // red,blue,green alert(colors); // re...
码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取。思维导图一、变量提升 面试题 1.问下面输出结果 if( !("a" in window) ){var a = 12 } console.log(a) // undefined无论条件是否成立都会变量提升,全局下的 var 相当于给 window 设一个属性 window.a = undefined。所以!("a" in window) 是 false,输出就是 undefined2.问下面输出结果 console.log(a) var a = '林一一' function fn(){c...
能实现一个new吗要实现new操作符,就要知道new + 构造函数都做了什么? 创建一个空的对象将空对象的__proto__属性指向构造函数的原型将this指向这个对象返回这个对象function newFun(context) {// 创建一个空的对象var obj = {}// 将空对象的__proto__属性指向构造函数的原型obj.__proto__ = context.prototype;// 将this指向这个对象 将传入的实参分割出来指向obj上context.apply(obj, [].slice.call(arguments, 1))return obj; } ...
值和引用 值在栈中保存 上->下 引用在堆中保存 下->上 深拷贝 问题:一个对象复制为另一个对象的时候,由于存放在堆区(具体再看),因此改变复制对象后源对象也会发生变换,因此需要深拷贝。 思路:1.首先判断该变量类型是否为对象,不是则直接return2.然后判断该变量类型为数组还是对象,创建相应的空的变量。3.循环遍历一下对象的内容,如果都是他的本身属性(非原型属性),那么就递归调用该函数实现深拷贝。由于到末端的值...