一、代码识别(填出下列结果 并讲出为什么)
1、(function(){
return typeof arguments;
})();
Object,(因为arguments是一个伪数组对象)
2、var f = function g(){ return 23; };
console.log( typeof g())
报错(这种形式叫做命名的函数表达式,它的名字g只在函数体内可见。在函数外部不可见,所以报错)
3、(function(x){
delete x;
return x;
})(1);
1(函数外面加括号是自执行函数调用函数,调用函数传参传进去了一个1,delete方法只能删除对象的属性,x根本删不了,所以该函数打印的结果是返回的x=1)
4、var y = 1, x = y = typeof x;
console.log(x);
Undefined(连等号的赋值过程是从右往左运算的。一开始x没有被赋值所以是undefined,然后x和y也都是undefined,所以结果是undefined)
5、(function f(f){ return typeof f(); })(function(){ return 1; });
Number(自执行函数返回值为1,所以调用f(f)的参数f=1,所以f()的类型就是number)
6、var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0];
})(foo.bar);
Undefined(this的指向问题,首先这个foo里面this指向的是调用者自身(这里是foo.bar),但是函数里面不存在baz这个属性所以是undefined,然后arguments[0]就是一个函数自执行的结果,this指向arguments[0],所以结果也是undefined)
7、var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();//问最后一行的执行结果
Undefined(this的指向问题,首先这个foo里面this指向的是调用者自身(这里是foo.bar),但是函数里面不存在baz这个属性所以是undefined)
8、var f = (function f(){ return “1”; }, function g(){ return 2; })();
typeof f; //问最后一行的执行结果
Number(这里是分组选择符——选择变量的最后一位,所以后面的一个自执行函数的返回结果是数字2,所以类型为number)
9、var x = 1;
if (function f(){}) { //在if判断里面直接被解析为boolean类型
x += typeof f;
} //x值为多少
1undefined(函数的声明不允许写在if判断条件中,写了会全部返回真,因为只有0 空字符串,undefined,null,false才是假。这里分f没有定义所以是undefined,然后x=1,1+undefined所以结果就是1undefined)
10、var x = [typeof x, typeof y][1];
typeof typeof x; //问最后一行的执行结果
String(通过判断typeof判断typeof,肯定返回字符串)
11、(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
Undefined(参数是一个对象,函数体内没有bar这个方法,所以是undefined)
12、(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
2(函数声明是在预编译的时候就先被解析了,所以在return之前,函数体里面两个函数就被执行了,第二个函数的结果覆盖第一个函数,所以结果为2)
13、function f(){ return f; } new f() instanceof f;//问这一行的值
False(instanceof作用是判断其左边的对象是否为右边类的实例。返回一个布尔值,这里返回false,但是这个函数的书写有问题,构造函数在执行完毕之后就变成了f值,不要给构造函数return)
14、with (function(x, undefined){}) length; //问length的值为多少
//with就是一个读写器,题意是取出函数的length属性
2(这里是函数的长度,其实就是函数形参的长度,所以长度为2)
15、console.log(a);
var a=1;
function a(){}
a=2;//a的结果是什么
f a(){}(代码在进行预编译的时候首先var了一个a,但是不会进行赋值的解析,a首先是undefined,然后解析了函数a(),所以刚开始打印的a是一个空函数f a(){})
16、setTimeout(() => { console.log(1)},0);console.log(2)
2 1(setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,当前代码执行完(执行栈清空)以后,尽可能的早执行,它在任务队列的尾部添加一个事件,因此要等到同步任务和任务队列的事情都处理完,才会得到执行,所以先打印2,然后才打印的1)
17、['1','2','3'].map(parseInt) 结果是什么
1 NaN NaN
https://blog.csdn.net/weixin_44135121/article/details/88050214
18、var arr = [3,4,5];var res = arr.unshift(1,2);console.log(res)
5(unshift()方法是向数组的开头添加一个或多个元素,并且返回添加之后数组的长度,原数组有三个元素,添加了两个所以结果为5)
19、var one;
var two = null;
console.log(one == two,one === two);
True false(one定义了没有赋值所以one是undefined,undefined的布尔值是false,null的布尔值也是false,所以==;但是===是false,因为他们不属于同一数据类型,null的数据类型是object,undefined的数据类型就是undefined)
20、function fn(){ var a = b = 1; }
fn();
console.log(b);//结果为
console.log(a);//结果为
1 报错(这样定义a,b,a是局部变量,b是全局变量,所以在函数外面打印a找不到这个变量所以a会报错not defined ,b可以找到结果为1)
二、代码书写
1、不用for循环生成0-100的数组
var arr =[]
var n =100
while(n){
arr.unshift(n)
n-=1
}
console.log(arr);
2、let arr1=[1,2,3,4,5]; let arr2=[4,5,6,7,8]; 找出俩个数组的交集
let arr1=[1,2,3,4,5];
let arr2=[4,5,6,7,8];
var arr3 = []
for(var value of arr1){
for(var value1 of arr2){
if(value == value1){
arr3.push(value)
}
}
}
console.log(arr3);
3、编写⼀个动物类,该类包含name的属性,和say的⽅法。 通过say⽅法可以打印动物说话了。编写⼀个Dog类继承动物类,要求 该类中包含颜⾊的属性,该类重写say⽅法,要求打印⽗类的say⽅法⾥的内容,并且打印 动物颜⾊+动物名字+“叫了”。(备注狗会一直叫)
class Animal{
constructor(name){
this.name=name
}
say(){
console.log('动物说话了');
}
}
class Dog extends Animal{
constructor(name,color){
super(name)
this.color = color
}
say(){
super.say()
console.log(this.color+this.name+'叫了');
}
}
var dog = new Dog('Judy','白色的')
dog.say()
4、现在有⽤户的⾓⾊有数组,如:[{id:1,name:’经理’},{id:2,name:’员⼯’}],⽤户已选择的数组[{id:2,name:’经理’}], 要求获取⽤户未 选中的⾓⾊列表,和⽤户已选择的⾓⾊的id数组。(使⽤es6语法实现)map、filter、some
var arr =[[{id:1,name:'经理'},{id:2,name:'员⼯'}]]
var selets =[[{id:2,name:'经理'}]]
// 遍历数组 selects
selets.map(v=>{
return v.id
})//选中的id数组
Arr.filter(v=>{
// 如果包含给你返回
var isTrue =selects.sonme((val)=>{
return val.id == v.id
})
return !isTrue
})//不包含的数组
标签:练习题,function,return,undefined,第三周,typeof,var,函数 From: https://www.cnblogs.com/lym-2022/p/16592807.html