匪夷所思的js
-
for循环中的判断条件
k最终的值是10,i<10和j<6这两个条件,只认第二个,只要第二个满足了就结束循环。 但如果你在中间加上&&或者||那么就是并且或者或的关系,写逗号的话就只看第二个。 -
js数据类型
选c,其中symbol是es6新规定的类型,是一种匿名的并且唯一的标识。用法:
let a = symbol(),那么a就是匿名并且唯一的。 -
Js闭包
答案是A,B是个错误答案,但很容易错选B,定时器只是个干扰 -
字符串以及数组操作
答案是C
-
关于浏览器宽度
答案是C,因为window都不具备其他三个属性。 -
关于函数原型链
答案是A
答案是A
B构造函数是有原型链的,他的原型链最终指向object
C对象就是构造函数的实例,否则对象是从哪里来的
D构造函数本身是一个普通的函数,只不过有一点特殊,是用来创建对象的,跟闭包没关系 -
关于执行顺序
答案为A
如果反过来就是false
I++后面的加号就不用看了,没用,那么就是++i==i
++I是把i自加后赋值给表达式,那么左边就是1,后面的i也是1,所以相等,是true,反过来就不是那么回事了
I++的整体值是1,++i之后就变成2了 -
函数返回值问题
纯吓唬人,选D,没有返回值就是undefined。看起来蛮吓人的,没有返回都是浮云。
答案是B
当fn1执行完后所有变量被销毁,所以当newfn第一次执行的时候a重新计算,就是1
但如果newfn在执行一次,由于之前newfn执行后a并没有被销毁,所以a还是保留的上一次的值1,所以在此执行就是2了 -
节点属性操作
答案是B
[]的方式是操作对象的,对象的属性存在于内存中,节点属性是dom属性,dom属性存在于dom文档中 -
关于new操作符
答案是C,如果作为构造函数调用,就不要返回任何东西,因为构造函数默认会返回当前函数的实例,就是一个对象,在加上return就会覆盖掉了。 -
classList有哪些操作
classList是es5中的内容,可以操作元素的类名。
用法:element.classList
属性:length,只读,返回类名的数量
方法:add 在元素中添加一个或多个类名,多个类名用逗号隔开
contains返回布尔值,指定的类名是否存在
item返回指定类名的索引值,索引值从0开始
remove移除一个或多个类名,移除不存在的类名不报错
toggleClass切换类名
示例: -
数组的every和some方法
例如:
其中两个知识点:…可以把对象或者数组展开,inputs属于类数组,所以要用…展开成真正的数组,htmlColections元素集合都是类数组
every用于循环数组中的每一项,每一项需要满足参数所返回的布尔值,这里每一个复选框必须是选中的,如果有一个没选中,整个值就是false
some跟every相反,只要有一项满足参数的返回的布尔值,整个值就是true,都不满足才返回false -
逗号表达式
-
全局作用域,局部作用域和块作用域
局部作用域是指的函数体内,块作用域是指的花括号括起的一段,比如if括起的和for括起的。var声明的变量支持全局和局部,不支持块,在块内声明的变量得不到保护,也会覆盖全局的。let支持全局,局部和块,在块内用let声明的变量在块内依旧有效,也不会替换全局的同名变量。 -
null与undefined
-
关于前端的规范
我承认这个有点跑题,但还是说一下吧。
AMD,CMD,以及UMD,UMD是统一模块定义,适用于前端以及后端。commonjs是一套后台的规范,它不是前端模块化规范。 -
构造函数需要注意的地方
构造函数不要返回对象或者是函数,这样做会覆盖掉new出来的对象,例如:
new f()出来的不是f的实例,而是返回的f函数,既然都没有实例了,那么instanceof 的结果就肯定为false了。 -
关于NAN这个东西
他的类型是个数字,它本身不是数字,所以用typeof操作符是判断不出来nan的。另外infinity也是同样的道理,所以用typeof操作符筛选不出来纯数字。正确的方法是用Number.isFinite()方法,这个方法是用来判断一个变量是否是有穷的,只要是纯数字就是有穷的,方法如下:
-
ie下ajax请求失败
原因:跨域
解决办法:
本文系根据妙味vip视频资料进行独立整理,属于二次加工,更多优质视频请关注妙味,尊重版权。