web前端面试

web前端ES6 ,ES5 的基础面试题

js基础面试题

1、js 的类型

1.认识js的基本类型

typeof undefined, //undefined
typeof ‘abc’ ,//string
typeof 123 ,//number
typeof true ,//boolean
typeof {} ,//object
typeof [] ,//object
typeof null ,//object
typeof console.log ,//function
typeof Symbol(1) // symbol

2、js 类型的原型搜索链

Number.proto === Function.prototype // true
Boolean.proto === Function.prototype // true
String.proto === Function.prototype // true
Object.proto === Function.prototype // true
Function.proto === Function.prototype //true
Array.proto === Function.prototype // true
RegExp.proto === Function.prototype // true
Error.proto === Function.prototype // true
Date.proto === Function.prototype // true

2、js 引用类型与值类型

1.引用类型

var a = {“x” : 1} ;
var b = a ;
a.x = 2;
console.log(b.x); //2
a = { “x” : 3};
console.log(b.x); //2

2.值类型

var a = 88;
var b = a;
a = 98;
console.log(b); // 98
b = 100;
console.log(b) ; // 100
console.log(a) ; // 98

3.值类型跟引用类型的总结

function abc(x){
 console.log(typeof (undefinded));   //undefinded 值类型
 console.log(typeof (x));   //number  值类型
 console.log(typeof (‘abc’)); //string 值类型
 console.log(typeof (true)) ; //Boolean 值类型 
 console.log(typeof (function(){ }))  //function 引用类型
 console.log(typeof ([1,"a",,true])) //Array 引用类型
 console.log(typeof ({ a:10, b: 20})) //Object 或者json 引用类型
 console.log(typeof (null)); // null  引用类型
 console.log(typeof (new Number(10))); //内置对象 引用类型
} 

function type(){
     console.log([48,56,64] + [5,2,7])  //string   48,56,645,2,7  
    console.log( -0 === +0 )           // true; 负0完全等于0;
}

这里还有一道变态的前端面试题,仅限参考
var a = { a: 1} ;
var b = a:
a.x = a = { a: 2 };
console.log( a.x ); // --> undefined
console.log( b.x ) ; [ object Object ]

到现在我都没搞懂这是其中的赋值问题

3. ES6 中的 var , let , const 的区别

1.使用 var 声明的是变量,其作用域为该语句所在的函数内部,且存在变量提升现象
2.使用 let 声明的是变量,其作用域为该语句所在的代码块内,不存在变量提升
3.使用 const 声明的是常量,其作用域为该语句所在的代码块内,不存在变量提升, 值是不可修改更改的

var a = 100;
{
console.log(a); //错误
let a = 10;
}

 //   var 声明
var arr =[];
for(var i=0;i<2;i++){       //此时循环的i 变成全局 var变量了,所以下面都是 2
arr[i]=function(){ console.log(i)};
}
arr[0]() ;     //2
arr[1]() ;      //2

  //  let  声明
var arr =[];         
for(let i=0;i<2;i++){       //如果循环体的 的i声明是let 
arr[i]=function(){ console.log(i)};
}
arr[0]() ;       //0
arr[1]() ;      //1

4. 箭头函数指向问题

(`箭头函数的默认this默认指向该函数作用域下的的上一级父级作用域的中的this`)


var obj = { name: 123}
function abc(){
     console.log(this);
     return ()=>{              //如果是传统的,那么这里的this是window
          console.log(this);
     }
}
var a = abc.call(obj)   // { name: 123}
a();  // { name: 123}
var obj = {
age:123,
add: ()=>{ console.log(this.age)}   //unfinent (如果是普通函数function 的话就是 123了)
}
console.log( obj.add())  //错误,此时的add()方法内的this 是window,而不是 obj
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值