JavaScript面试必问 上

文章目录

  • 前言
  • 一、JS延迟加载有哪些方式
    • 为什么需要延迟加载
    • async
    • defer
  • 二、null和undefined的区别
    • 原因
    • 具体区别
  • 三、== 和 ===的不同


前言

本文讲解了JavaScript面试时会问的几种问题,如果觉得对你有所帮助,请三连支持博主,你的支持就是我更新的动力。


以下是本篇文章正文内容

一、JS延迟加载有哪些方式

为什么需要延迟加载

js 的加载、解析和执行会阻塞页面的渲染过程,因此我们希望 js 脚本能够尽可能的延迟加载,提高页面的渲染速度


延迟加载Js的方法其实有很多这里我们之讲async跟defer 属性,首先我们先看一个案例。

DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>title>
		<script type="text/javascript" src="new_file.js">
			
		script>
	head>
	<body>
		<div id="box">
			1111
		div>
	body>
html>
console.log()

结果:

JavaScript面试必问 上_第1张图片
可以看到没有办法获取到,但是我们加入了async跟defer 属性就可以获取的到了。

DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>title>
		<script async type="text/javascript" src="new_file.js">
			
		script>
	head>
	<body>
		<div id="box">
			1111
		div>
	body>
html>

JavaScript面试必问 上_第2张图片


那async跟defer 的区别是什么?

async

async是和html同步解析的,不是顺次执行js脚本(谁先加载完谁执行)

官方语言:
async 属性是一个布尔属性。

async 属性一旦脚本可用,则会异步执行。

注意:async 属性仅适用于外部脚本(只有在使用 src 属性时)。

注意:有多种执行外部脚本的方法:

如果 async=“async”:脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
如果不使用 async 且 defer=“defer”:脚本将在页面完成解析时执行
如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本


defer

defer会等html全部解析完成,才会执行js代码顺次执行

官方语言:
defer 属性是一个布尔属性。

defer 属性规定当页面已完成加载后,才会执行脚本。

注意:defer 属性仅适用于外部脚本(只有在使用 src 属性时)。

注意:有多种执行外部脚本的方法:

如果 async=“async”:脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
如果不使用 async 且 defer=“defer”:脚本将在页面完成解析时执行
如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本


二、null和undefined的区别

大家都知道null是空 而 undefined是未定义的 ,但是很多人都不知道如何用简单明了的语言来讲述他们的区别,那么JavaScript语言为什么会设置两个表示“无”的值呢?

原因

1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示“无”的值。根据C语言的传统,null被设计成可以自动转为0.但是,JavaScript的设计者,觉得这样做还不够,主要有以下两个原因。

1.null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,作者觉得表示”无”的值最好不是对象.

2.JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。作者觉得,如果null自动转为0,很不容易发现错误.因此,作者又设计了一个undefined.

这里注意:先有null 后有undefined,出来undefined是为了填补之前的坑.

具体区别

JavaScript的最初版本是这样区分的:null是一个表示“无”的对象(空对象指针),转
为数值时为0;undefined是一个表示"无”的原始值,转为数值时为NaN.


三、== 和 ===的不同

首先我们都知道两个都是来做比较的,是来判断两边是否相等的

== :比较的是值

如果两个值类型相同,再进行三个等号(===)的比较
如果两个值类型不同,也有可能相等、需根据以下规则进行类型转换在比较:
如果一个是null,一个是undefined,那么相等
如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较

console.log(1=='1')
console.log(true==1)
console.log(null==undefined)
console.log([1,2]=='1,2')

JavaScript面试必问 上_第3张图片

===:除了比较值,还比较类型

(1)如果类型不同,就一定不相等
(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN.那么不相等。(判断一个值是否是NaN、只能使用isNaN()来判断)
(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
(4)如果两个值都是true,或是false,那么相等
(5)如果两个值都引用同一个对象或是函数,那么相等,否则不相等
(6)如果两个值都是null,或是undefined.那么相等

JavaScript面试必问 上_第4张图片

你可能感兴趣的:(javascript,前端,html)