JavaScript第一篇
一些常见的面试题内容,希望也能助你一臂之力🌸🌸🌸🌸🌸
Q1、JavaScript 的数据类型有哪些?
A:基本数据类型 string ,number ,Boolean,undefined,null,symbol,bigint(symbol和bigint为ES6以后版本新增)
B:引用数据类型 object(包括:array和function)
//举个例子
eg1:Boolean与number的运算是什么产物?
console.log(true+1); //结果 2,将true 类型转为数字1
console.log(false+1); //结果 1,将flase 类型转为数字0
console.log(true*1); //结果 1
console.log(false*1); //结果 0
eg2:Boolean与string的运算是什么产物?
console.log(true+'name'); //结果 truename,将布尔值转为字符串
console.log(false+'name'); //结果 falsename
eg3:undefined NaN 与number的运算是什么产物?
console.log(undefined+1); //以下结果均为NaN
console.log(NaN+1);
console.log(undefined+NaN);
eg4:undefined NaN 与null到底是什么类型?
console.log(typeof null); //Object
console.log(typeof NaN); // number,但是不是具体的数字
console.log(undefined); // undefiend
Q2、null和undefiend的区别?
野史:在早期的网页中 null会被隐式转为0,很不容易发现错误。所以后来引入undefiend,其实就是为了补坑之前的这个坑。
A: null是一个表示“无”的对象(空对象指针)
B: undefined表示值,转为数值时为NAN
Q3、= 和===又什么不同?
== :比较值
===:值和数据类型
//举个例子
== 号判断:数值相等则就为true
console.log(null == undefined); //true
console.log(1=='1'); //string == number ||
console.log(true == 1); // boolean == number ||
console.log([1,2]=='1,2'); //object == number || object转为基本类型
=== 号判断:不仅是数值相等,还需要数据类型相等
console.log(null === undefined);//false
console.log(1==='1'); //false
console.log(true === 1); //false
console.log([1,2]==='1,2');//false
Q4、延迟加载js有哪些方法?
async defer
eg:<script defer type="text/javascript" src="srcipt.js"></script>
defer:等全部的html解析完成,才会执行js代码,顺次执行js脚本
async:async是和Html同步解析的,谁先加载完js先执行
Q5、JS的微任务和宏任务是什么?
1、js是单线程的
2、js代码的执行流程
同步任务执行完 --> 事件循环【宏任务、微任务】 --> 微任务 -->宏任务
进入事件循环【请求、定时器、事件....】
3、微任务 :promise.then
宏任务:setTimeout
//举个例子
console.log(111); //1、先执行
for(var i=0;i<3;i++){ // 3、同步任务: i=3,不满足for循环条件,跳出,进入事件循环
setTimeout(function(){ //定时器,进入事件循环,间隔1s打印3,
console.log(i); // 3,3,3
},1000*i)
}
console.log(222);// 2、先执行
执行结果:111 222 3(打印3次)
setTimeout(function(){
console.log('宏1'); //5、宏任务
})
new Promise((resolve)=>{
console.log('同步1'); //1、同步
resolve();
}).then(()=>{
console.log('微1');//3、微任务
}).then(()=>{
console.log('微2');//4、微任务
})
console.log('同步2');//2、同步
执行结果:同步1 同步2 微1 微2 宏1
Q6、js作用域
1、除了函数外,js是没有块级作用域的
2、内部可以访问外部的变量,但是外部不能访问内部的变量
3、变量查找会优先在内部查找变量
4、申明变量使用var ,没有使用就是window
5、变量提升机制【变量悬挂声明】
//举个例子
//1、优先找内部里面有的
var a = 10;
function fun(){
var a = 20;
function foo(){
var a = 30;
console.log(a); //30
}
foo(); //函数调用
}
fun();//函数调用
结果:30
//2、内部可以访问外部的变量,但是外部不能访问内部的变量
var a = 20;
// console.log(b); //报错
function fun(){
var b = 10;
console.log(a); // 20
};
fun();
结果:报错 20
//3、申明变量使用var ,没有使用就是window
(function(){
var a = b = 10; // window.b
//b 没有使用var,全局
// 相当于 b = 10;
})();
// console.log(a); //报错,使用了var。(函数外部访问内部变量)
console.log(b); 10
//4、变量提示
function fun(){
console.log(a); //undefined
}
fun();
var a = 10;
相当于是:
var a;
function fun(){
console.log(a); //undefined
}
fun();
a = 10;
Q7、js对象
1、js对象是通过new操作符构建出来的,所以对象之间不相等
2、但是要注意 引用类型
3、对象的key都是字符串类型
4、对象查找属性|方法的过程
先在对象本身找 -->构造函数中找 --> 对象原型中找 --> 构造函数原型中找 -->对象的上一层中找
//举个例子
console.log([1,2,3] === [1,2,3]) //false
console.log(typeof [1,2,3]); //object
var obj1 = {
a:'hello'
}
var obj2 = obj1;
console.log(obj2);//{a: 'hello'}
obj2.a = 'world'
console.log(obj1); //{a:'world'},属性值被修改
(function(){
console.log(a);//undefined,变量提升,未赋值
var a = 1;
})();
var a = {};
var b = {
key:'a'
}
var c = {
key:'c'
}
a[b] = '123',
console.log(a[b]);//123
a[c] = '456'
console.log(a[b]); // 456
console.log(a[c]);//456
休息一下,下一篇下一篇