1、为什么 jQuery 整体上是一个匿名函数自调用?
因为匿名函数自执行里面的所有东西都是局部的,这样引用 jQuery 时,能防止和其他的代码冲突。
2、jQuery 静态方法和实例方法的区别
$()
是调用 jQuery 方法返回的一个 jQuery 对象,$()
调用的方法是实例方法,实例方法只能为$()
所用如:$("li").each()
$
是 jQuery 函数(方法),$
调用的方法是静态方法/工具方法,静态方法既可以给$()
调用,也可以给原生 javascript 调用如:$().each()
3、为什么 typeof null 的结果是 object ?
console.log(typeof null) //object 复制代码
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"。
MDN链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof
4、undefined 不是 js 的关键字
我们习惯在项目里这样判断是否为 undefinedname===undefined?'a':'b' 复制代码
但一旦在块级作用域中,手动定义 undefined 并且赋值了,那么会覆盖掉 js 的变量类型 undefined
{ let undefined='a' console.log(undefined) //a } 复制代码
所以,在做项目中,不要给变量起名为 undefined,并赋值(感谢 @子奕 同学的提醒)
5、利用原型,来节省内存
A:function person(name){ this.name=name this.showName=function(){ console.log(this.name) } } 复制代码
B:
function personA(name) { this.name=name } personA.prototype={ showName:function () { console.log(this.name) } } 复制代码
使用方法 A 来 new 对象时,每个对象都要定义一遍 showName 方法,这会增加浏览器的内存
而使用方法 B new 对象的话,每个对象都共享了原型的方法,从而节省内存6、new 一个对象,一般经过四个步骤
(1)创建一个新对象(2)将构造函数的作用域赋值给该对象(即 this 指向该对象)(3)执行构造函数的代码(4)返回该新对象注意:new 关键字的重要作用就是把 实例对象的 this 与 原型链相关联7、当给数组的index赋负数或小数时,数组的长度有无变化?
let arr=[] arr[10]=11 console.log(arr.length); //11 arr[-1]=-1 console.log(arr.length) //11 arr[3.14]=3.14 console.log(arr.length) //11 //=================================== let arr1=[] arr1[2.1]=2.1 console.log(arr1[2.1],'arr144') //2.1 console.log(arr1.length,'arr145') //0 arr1[1]=1 console.log(arr1.length,'arr147') //2 //======================== let arr2=[] arr2[-1]=-1 console.log(arr2.length,'arr253') //0 复制代码
(之前的例子写的不对,感谢 @CurryME 同学的提醒)
8、antd的<Input>
的 allowClear 作用是清除value的值,如果你的value是保存在state里的话,也是可以清除的
复制代码
9、对象有中文属性,如何通过解构赋值的方式去获取中文属性?
let obj={ '哈哈':1} const { '哈哈':b}=obj const { a:{ '嘿嘿':b}}=obj console.log(b,'b24') //1 复制代码
10、对象解构赋默认值
//默认设为noa const {a='noa'}=obj //默认设为nob const {a:{b='nob'}}=obj 复制代码
(完)