目录
一、选择题
1、执行下列选项的程序,输出结果不是Window对象的是()
2、以下哪些代码执行后 i 的值为10:
二、编程题
1、判断 val1 和 val2 是否完全等同
2、统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率①不限制 key 的顺序;②输入的字符串参数不会为空;③忽略空白字符
一、选择题
1、执行下列选项的程序,输出结果不是Window对象的是()
A、
setTimeout(function(){
console.log(this);
},1000);
B、
function Star(){
console.log(this);
}
new Star();
C、
var o = {
sayHi:()=>{
console.log(this);
}
}
o.sayHi();
D、
(function(){
console.log(this);
}());
正确答案:B
解析:
(1)箭头函数不会与this进行绑定,其this指向取决于该箭头函数同级作用域的this指向,又由于对象不能形成自己的作用域,因此其作用域为全局作用域,this指向Window对象
(2)
①默认绑定:指向window,例如fn(),实际上是window.fn(),window调用,指向window
②隐式绑定:obj.fn() ,指向obj,是obj在调用
③显示绑定:call()、apply()、bind(),要指向谁就写在()里面
④new绑定:指向new创建的对象,new fn()
2、以下哪些代码执行后 i 的值为10:
A、
let i =1 + {
valueOf() { return 9; }
};
B、
let i = 0;
new Array(10).forEach(() => {
i++;
});
C、
let i = parseInt('0xA');
D、
let i = 5;
function a(i) {
i *= 2;
}
a(i);
正确答案:AC 你的答案:BCD
解析:
(1)A选项:{ valueOf() { return 9; } } 有一个匿名对象
①该对象有一个名为 valueOf 的方法,对象与数字相加时,对象调用自身的 valueOf 方法转换为数字,故输出 i == 1 + 9 == 10;
②当对象没有提供valueOf方法时,对象与数字都转换为字符串相加1 + {} == '1[object Object]'
③valueOf() 在尝试加法、乘法之类的会转换成原值,转换成原始值,有两种模式:
偏字符串(首先调用tostring 如果不是原始值 会调用valueof)
偏数值(首先调用valueof 如果不是原始值接着调用tostring)
(2)B选项:输出值为0,因为forEach方法在数组元素为空时会跳过执行回调函数,相当于此选项回调函数并未执行
(3)C选项:在没有指定基数的情况下,如果字符串以"0x"或者"0X"开头, 则基数是16 (16进制)。
相当于let i = parseInt('0xA',16)
(4)D选项:i 是形参,属于局部变量,执行 a(i) 后,返回undefine,不影响全局变量 i 的值
二、编程题
1、判断 val1 和 val2 是否完全等同
解析:
(1)法一:Object.is()
function identity(val1, val2) {
return Object.is(val1,val2)
}
(2)法二:===
function identity(val1, val2) {
return val1 === val2
}
2、统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
①不限制 key 的顺序;②输入的字符串参数不会为空;③忽略空白字符
输入描述:'hello world' 输出描述:{h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}
解析:
(1)法一:filter过滤空格,forEach遍历字符串元素文章来源:https://www.toymoban.com/news/detail-499280.html
<script>
let str = 'hello world'
function count(str){
let strArr = str.split("").filter(e=>{
return e&&e.trim()
})
const obj = {}
strArr.forEach(element => {
if(obj[element]){
obj[element]++
}else{
obj[element] = 1
}
});
return obj
}
console.log(count(str));
</script>
(2)法二:利用replace和正则将str存在的空格去除,利用for of 迭代可迭代对象文章来源地址https://www.toymoban.com/news/detail-499280.html
<script>
let str = 'hello world'
function count(str){
let strArr = str.replace(/\s/gi,'')
const obj = {}
for(let i of strArr){
if(obj[i]){
obj[i]++
}else{
obj[i] = 1
}
}
return obj
}
console.log(count(str));
</script>
到了这里,关于专项练习11的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!