JavaScript面试题和答案!(总结)

1. 解释 JavaScript 中的值和类型

JavaScript提供两种数据类型: 基本数据类型和引用数据类型
基本数据类型有:

String
Number
Boolean
Null
Undefined
Symbol

引用数据类型有:

Object
Array
Function
2. 什么是 IIFE(立即调用函数表达式)?
它是立即调用函数表达式(Immediately-Invoked Function Expression),
简称 IIFE。函数被创建后立即被执行:

在避免污染全局命名空间时经常使用这种模式,因为 IIFE(与任何其他正常函数一样)内部的所有变量在其作用域之外都是不可见的。

2. 经典的24个JavaScript面试题和答案!

点这里

2. 程序题

在这里插入图片描述
undefined 6

首先函数中this指向的是window。当x=a(5)时,x = window 。当y = a(6)的时候,
x被覆盖成6,y返回window,所有也就是x.x就是6.6 。
x作为number类型的属性(包装类),不报错,
返回undefined,y.x也就是window.x 返回6

题目:

var obj = {}, b = {key : '123'}, c = {key : '456'};
obj[b] = 'b';
obj[c] = 'c';
console.log(obj[b]);

解析:答案是c,对象的属性名称不能是对象,所以的话,要是对象的话,会调用toString方法,对于b,c而言,私有中没有定义toString方法,就会去调用Object.prototype.toString方法,而这个方法是用来检测数据类型的,对于数组[].toString()方法不一样,所以obj中内容应该是:{[object Object]: “c”}

题目:

var obj = {}, b = Symbol(1), c = Symbol(1);
obj[b] = 'b';
obj[c] = 'c';
console.log(b)

Symbol是ES6新增加的数据类型,typeof Symbol(123) === ‘symbol’
Symbol创建出来的值都是唯一的,也就是说,b与c不相等
{Symbol(1): “b”, Symbol(1): “c”}

题目:


function Foo(){
    Foo.a = function (){
        console.log(1)
    }
    this.a = function () {
        console.log(2)
    }
}
// 把Foo当作是类,在原型上设置实例公有的属性方法 实例.a()
Foo.prototype.a = function () {
    console.log(3)

}

//Foo当作是普通对象设置私有的属性方法 Foo.a()
Foo.a = function () {
    console.log(4)
}

Foo.a();   //  =>4
let obj = new Foo();     
// obj 可以调用原型上方法
// new Foo() 当作是普通函数执行, Foo.a => 1  obj.a: fn=> 2
obj.a()  // 2
Foo.a(); // 1

题目:


var b = 10;
(function b(){
    b = 20;
    console.log(b);   // fn
})()
console.log(b)  //10

// 1. 本该匿名的函数如果设置函数名,在外面无法调用,但是函数里面可以
// 2. ;类似于创建一个常量,这个名字存储的值不能再被修改

题目:重写下面a的内容,最后输出OK

var a = ? // 
if(a == 1 && a == 2 && a == 3 ){
    console.log('OK')
}

第一种方式:

var a = {
    n : 0,
    toString : function(){
        return ++this.n;
    }
}

// 很明显,只有对象才可能满足,然后对象跟数字比较的话,
//需要toString转换成字符串,然后再进行比较,
//而非数组对象的toString原本是判断数据类型的,
//所有我们需要去在a上面定义一个私有的toString方法。

第二种方式:Object.defineProperty


Object.defineProperty(window,'a',{
    get : function () {
        this.value?this.value++ : this.value=1;
        return this.value;
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值