2021秋招前端笔试题部分总结

1.下面这段程序输出什么?

(function(a){
    this.a = a;
    return b => this.a+b;
}(function(a,b){
    return a;
}(1,2)
))
console.log(a,b);

2.keydown和keyCode
keydown事件的event.keyCode是什么?
keydown事件在按下键盘上任意键(文本框发生变化之前)被触发,且按住不放会重复触发,当按下的键是数字字母字符键是,它的keyCode属性值与ASCII码中对应的小写字母或数字的编码相同。
例如:字母A键——65、数字键7——55,即使没有shift键被按下(切换大小写)字母A/a都为——65
3.使用CSS媒体查询实现:
用户设备最小宽度为180px或纵向模式屏。

@media screen and (min-width:180px),(orientation:partait)

4.下面这段代码输出什么?

var a = 10;
(function(){
    console.log(a);
    a = 5;
    console.log(window.a);
    var a = 20;
    console.log(a);
})();

结果:

undefined
10
20

分析:
首先,函数外声明了一个全局变量a,该变量使用var声明,使用var声明的变量会被自动添加到最接近的环境中,对于该变量来说就是全局环境(浏览器中是window对象)。
接着,第3行,在使用自执行匿名函数模仿的块级作用域中打印a,由于…
5.下面的代码输出什么?

console.log(null === null);
console.log(undefined === undefined);
console.log(null == undefined);
console.log(null === undefined);
console.log(NaN == NaN);
console.log(NaN === NaN);
true
true
true
false
false
false

6.下面的代码会输出什么?

function fn(a=1){
    console.log(a);
    // console.log(arguments);
}

fn();
fn(undefined);
fn(null);
fn(false);
1
1
null
false

7.下面代码的输出是什么?

Function.prototype.Sangfor = function(){
    return Function.prototype.call.bind(this);
}
console.log(Array.prototype.push.Sangfor()([],0,1,2));
3

谁能看懂求指点?
8.下面代码的输出是什么?

function Sangfor(){}
Sangfor.prototype.name = 100;
let a = new Sangfor();
console.log(a.name);
Sangfor.prototype.name = 200;
console.log(a.name);
Sangfor.prototype = {name:300};
console.log(a.name);
100
200
200

9.什么是CSP?
10.哪些方式可以阻止Javascript获取cookie中的内容?
11.有效防止Web站点被中间人攻击的方式?
12.如何利用border-radius绘制圆形?
13.Symbol.for('a')是什么意思?
14.如何改变一个button元素的可用状态为可用?
(1)button.setAttribute('disabled',true);
(2)button.removeAttribute('disabled');
(3)button.attr("disabled",true);
(4)button.removeAttr("disabled");

参考:

:enabled	$(":enabled")	所有激活的 input 元素
:disabled	$(":disabled")	所有禁用的 input 元素

15.Javascript中的string类型究竟是基本数据类型还是引用数据类型?怎么解释字符串名是指向字符串存储地址的引用?怎么解释字符串还有toString()等方法?
字符串时行为与基本类型相似的不可变引用类型

基本类型在内存中具有固定的大小,而引用类型则不同。例如,对象可以具有任意的长度,无固定大小。数组也是。
基本类型变量存的是数据的具体值,而引用类型变量保存的是值的引用。
因此数值、布尔值、null和未定义(undefined)都属于基本类型。对象、数组和函数则属于引用类型。
string类型有些特殊,因为字符串具有可变的大小,所以显然它不能被直接存储在具有固定大小的变量中。由于效率的原因,我们希望JS只复制对字符串的引用,而不是字符串的内容。但是另一方面,字符串在许多方面都和基本类型的表现相似,而字符串是不可变的这一事实(即没法改变一个字符串值的内容),因此可以将字符串看成行为与基本类型相似的不可变引用类型。

16.以下代码的输出是什么?

console.log(undefined == "0"); //false
console.log([] == false); // true
console.log(null == 0); // false
console.log(null == undefined); // true
console.log([] == []); // false
console.log(NaN == false); // false

为什么?

ECMAScript 中的相等操作符由两个等于号 ( == ) 表示,如果两个操作数相等,则返回 true。

相等操作符会先转换操作数(通常称为强制转型),然后比较它们的相等性。

在转换不同的数据类型时,相等操作符遵循下列基本规则:

  1. 如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;

  2. 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;

  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;

  4. 如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false;

  5. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象,则相等操作符返回 true;

  6. 在比较相等性之前,不能将 null 和 undefined 转成其他值。

  7. null 和 undefined 是相等的。

以上内容摘自《 JavaScript 高级程序设计(第3版)》3.5.7

如果相等操作符两边的操作数,不包含 null 或者 undefined,且两个操作数不全是对象,在执行相等比较之前,会先调用 Number() 将两个操作数强制转为 Number 类型,然后进行比较。

NaN == NaN;  //false (参考第4条规则)
[] == [];    //false
[] == ![];   //true
{} == {};    //false
{} == !{};   //false

如果两个对象指向同一个对象,相等操作符返回 true

所以 {} == {} 的结果是 false,同样的, [] == [] 的结果也是 false

Number([]) == Number(false);   // ->  0 == 0  ->  true
{} == !{}  ->  {} == false  ->  Number({}) == Number(false)  ->  NaN == 0

17.for-in和for-of的区别?

for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

for-in总是得到对象的key或数组、字符串的下标。

for-of总是得到对象的value或数组、字符串的值,另外还可以用于遍历Map和Set。

参考文章:https://www.cnblogs.com/yanggb/p/11455127.html
18.下面代码输出什么?

let Base = {
    name:'base'
}
let A = function(){
    this.name = 'a';
}
A.prototype = Object.create(Base);
let a = new A();
Base.name = 'new name';
console.log(a.name);
delete a.name;
console.log(a.name);
a
new name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值