在JavaScript中下面选项,关于this描述正确的是()
A在使用new实例化对象时, this指向这个实例对象
B当对象调用函数或者方法时,this指向这个对象。
C在函数定义时,this指向全局变量
D在浏览器下的全局范围内,this指向全局对象
this表示当前对象,this的指向是根据调用的上下文环境来决定的,默认指向window对象。
A选项,使用 new 实例化对象,在构造函数中的this指向实例化对象。所以A正确。
B选项,当对象函数调用,哪个对象调用就指向哪个对象。所以B不正确。
C选项,函数的定义位置不影响其this指向,this指向只和调用函数的对象有关。所以C不正确。
D选项,这个要分情况而定,例如对象函数调用某个对象的函数, 它指向当前对象。所以D不正确。
已知a为不为空的数组,且变量b===a.
以下哪些方式可以清空数组, 使得a.length 与 b.length 都为 0; ()
A b.len(0)
B a = []
C a.splice(0, a.length)
D a = a.slice(a.length)
选项A,数组不存在len方法
选项B,数组为引用类型,仅仅修改a为空数组,那么b原来的引用不变,此时a和b的分别指向不同的数组。
选项C,splice的作用是删除数组的元素,通过a.splice(0, a.length)可以删除数组的全部元素,a和b的引用相同,所以最终的length都为0.
选项D,a.slice的作用是截取一个新的数组,虽然a.slice(a.length)截取出来的数组为空数组,但是,赋值该a后,相当于构造了一个新的空数组,并没有影响之前数组a与b之间的关系,b还是原来的数组。而splice方法是在a数组中进行元素的删除,而b数组与a数组此时相当于双向的绑定,无论a,b数组进行什么操作,都会影响到两个数组。
正则表达式 /a+(bab)?(caac)*/ ,下列选项中是该正则表达式的子集是
A /(bab)(caca)/
B /a(bab){2}(caac)*/
C /a{2}/
D /a+(bab){0,1}(ca)+(ca)/
E /a(^bab)+(caac){1,}/
F /a+(babc){2,}(acc){1,}
第一步:理解题目。
题目中的 a+ 代表 字符“a” 出现1次或者若干次,(bab)? 代表 字符 “bab” 出现一次或者0次,(caac)* 表示重复了“0或者若干次”的字符“caac”,即 字符“caac”出现0次或者若干次 。
若改题目为/李+太?白*/,可匹配:李、李太、李白、李太白、李李、李李太、李李白白、李李太白白等。
第二步:理解选项,选出子集。
A选项 /(bab)(caca)/ :匹配含有 “babcaca” 的字符串,不是题目中的 “babcaac”, 就好比是在找 “太星” 而不是"太白",而且没有a,所以该正则匹配的结果不可能出现在题目匹配的结果中,错误。
B选项 /a(bab){2}(caac)*/ :其中(bab){2} 表示 字符串“bab”必须出现2次,与题干正则显然不同,错误。
C选项 /a{2}/ :其中(a){2} 表示 字符“a”必须出现2次,就好比 “李李” ,属于题目匹配结果的子集,正确。
D 选项/a+(bab){0,1}(ca)+(ca)/ :前半部分正确,后半部分(ca)+(ca)明显错误。
E 选项/a(bab)+(caac){1,}/:正则本身有误,(bab)匹配以"bab"开头的字符串,但前面还有a,也就是匹配以a开头的字符串,两者矛盾。
F选项 /a+(babc){2,}(acc){1,}/:分组和区间值都不正确。
将数组 var a=[1,2,3] 变成数组 [ 4,3,2,1] 下面的方式正确的是?
A a.reverse().unshift(4)
B a.push(4).reverse()
C a.push(4); a.reverse()
D a.splice(3,1,4).reverse()
js中:
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。该方法会改变原始数组。
A选项,a.reverse()后返回值即数组a变成[3,2,1],再使用unshift()方法在数组开头添加一个4,a数组就变成了[4,3,2,1]。注,unshift()返回新数组的长度,此处为4。正确。
B选项,push()方法返回新数组的长度,是一个number类型,不是数组,所以不能再用“.”操作符继续执行reverse()方法。错误。
C选项,正确。
D选项,splice()语法:arrayObject.splice(index,howmany,item1,…,itemX)。
由于a.splice(3,1,4)中的index为3,超过了数组a的下标,所以3后面的1也不会起作用。a.splice(3,1,4)会将4插入到数组a末尾。但splice()返回值是被删除项目的新数组,由于a.splice(3,1,4)并没有删除元素,所以返回的新数组为空,对空数组reverse()还是空。错误。
在ES6中提供了ArrayBuffer,TypeArray,DataView用于二进制的操作。
ArrayBuffer对象:代表原始的二进制数据。
TypedArray视图:用来读写简单类型的二进制数据。
DataView视图:用来读写复杂类型的二进制数据。
使用 for in 循环数组中的元素会枚举原型链上的所有属性,过滤这些属性的方式是使用**hasOwnPropert**y函数
for in可以获取object的所有属性,包括自定义属性以及原型链属性,hasOwnProperty只能获取自定义属性,无法获取原型链属性