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
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 引用类型与值类型
var a = {“x” : 1} ;
var b = a ;
a.x = 2;
console.log(b.x); //2
a = { “x” : 3};
console.log(b.x); //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