微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript基础

JS 历史

既然要学 JavaScript 的话,那就必然要先来了解一下它的历史,这玩意儿是怎么来的。
1995年,JavaScript 在网景公司问世,问世之后就爆火了;
1996年,微软自己也搞了一版出来,两个版本打起来了;
1997年,终于他们找到了 ECMA(一个专业做标准的联盟),打造出ECMA-262标准,基于此标准实现了ECMAScript;
然后ECMAScript就开始各种版本的迭代了。。。

但是吧,JavaScript 不完全是 ECMAScript ,相比 JavaScript 还包含了 DOM 和 BOM.

关于 JS 数据类型

这道题基础,但感觉可以延伸的点挺多的。

JS 有哪些数据类型

JS 一共有8种数据类型,其中ES6种就有的有6种,新增了两种,

ES6有的:数字(Number)、字符串、布尔(true/false)、对象、undefined、null

新增的:bigint、symnol

在自己目前的学习过程中,好像都没有用到新增的这两个,js 的数据类型这题应该是非常非常基础的题目了,虽然简单但感觉也易错,例如一些初学者可能还会回答「 数组、函数、日期 」,但这些不是数据类型,是类,千万不能混淆了呀!!!

undefined 与 null 有哪些区别

null:表示没有对象,即此处不应该有值;

undefined:表示缺少值,即此处应该有值,但是还没有定义

关于这个问题,阮大大的文章解释得挺好,涉及到JavaScript的历史:https://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

为什么需要bigint

bigint 可以表示超过 Number 范围的数,例如可以用来表示高精度的时间戳

什么是浮点数

JavaScript 中所有的数字,无论是整数还是小数都只有一种类型 Number,在程序内部 Number类型实质是一个 64 位固定长度的浮点数,也就是标准的 double 双精度浮点数。

推荐文章:https://segmentfault.com/a/1190000020333292

JavaScript 判断类型的方式及原理是什么?

第一种:typeof()

判断范围:可以判断除 null 外的其他数据类型,除了数据类型,typeof 还能判断 function,这个自己在控制台上操作一波就记住了~

image.png

判断原理:type 是根据各个类型机器码的前 3 位进行判断的,对象的前 3 位是 000,而 null 的所以机器码都是 0 所以 null 被判断出来为对象(那为啥,不是对象被判断为null呢?)

第二种:instanceof

判断范围:一般用来判断引用数据类型,判断一个实例是否属于某种类型,

【case】A instanceof B,判断A是否为B的实例对象,从而判断A是否为B类型

第三种:constructor

第四种:Object.prototype.toString.call()

可以判断所有的数据类型,也是最准的一种,涵盖最全的

(目前来讲,我只用到 typeof 这个方式,后续有用到其他的再慢慢补充内容

讲一下 JS 原型与原型链

什么是原型

什么是原型链

对象只有一层模型?

  • 原型链:原型链是一条对象隐式原型不断往上指向的一条指向链,尽头是Object的隐式原型,也就是null
  • 作用:构造函数原型上的东西可以让实例们共享,从而节省了空间

如何创建一个原型链

如何改变(3种?),如何判断

原型链解决什么问题

在没有class的情况下实现继承

原型链的优缺点

优点:

缺点:原型链唯一的缺点就是不支持私有属性

如何解决原型链的缺点

那就用 class 呗~只是 class 是 ES6 引入的,不支持 IE 浏览器

文章推荐:https://www.zhihu.com/question/56770432/answer/315342130

扩展1: 什么是私有属性

扩展2: 继承与原型链的区别

只学原型链的话感觉其实原型链和继承好像也差不多?但后面学继承的话就是可以用原型链实现继承。

扩展3: ES6 有了 class 还要原型链吗

实际上我理解,在 ES6 推出class之前,就是用的原型链在 js 里实现继承,原型链更像是一种设计模式?

js 如何实现类

有两种实现方法
方法1: 使用原型
方法2:使用class
(class没有提供在原型上添加函数属性方法

代码中的 this 是什么

this 是什么

this 是 call 的第一个参数,this 会根据所处的环境自动转换(window、)

扩展1: 什么是语法糖

扩展2: ’use strict‘ 的作用是什么

扩展3: 什么是 call

扩展4: call 与 apply 的区别

8、call、apply、bind的区别?

  • call于apply的区别在于传参,前者直接传参,后者传一个数组
  • bind传参后不立即执行,而是会返回一个函数,这个函数可以继续传参,且执行(bind函数可以分两次传参)

bind返回的函数能作为构造函数吗?

不能哦,会报错的

文章推荐:https://www.zhihu.com/search?type=content&q=this%E7%9A%84%E5%80%BC%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88

js 的 new 做了什么事情

创建新对象, new 做了 4 件事情,学习 new 之前一定要先理解原型链与 this 。

扩展1: JS 中的设计模式?

文章推荐:https://zhuanlan.zhihu.com/p/23987456

js 的立即执行函数

是什么

声明一个函数立即执行

怎么做

只要通过语法检查即可

作用

在 ES6 之前,使用其创建局部作用域,ES6 之后用 let

什么是闭包

2、闭包是什么?有什么优缺点

闭包是一个能让函数外部访问到函数内部的一个函数

  • 优点是:延长函数内部变量的寿命,使函数外部能访问到函数内部
  • 缺点是:滥用闭包导致内存溢出,页面卡顿

文章推荐:https://zhuanlan.zhihu.com/p/22486908

扩渣1: 浏览器垃圾回收原理

js 如何实现继承

创建两个class,然后 class A extents B

实例化与继承概念区分

ES 6 语法知道哪些,分别怎么用?

Promise、Promise.all、Promise.race 分别怎么用?

什么是 JSONP,什么是 CORS,什么是跨域?

async/await 怎么用,如何捕获异常?

如何用正则实现 trim()?

JS 的作用域和作用域链

JS 的组件化和模块化

组件化

组件化开发的优缺点

组件化开发的原则

模块化

模块化的几种方法

模块化的优缺点

js 发展趋势

赋值、深拷贝与浅拷贝有什么不同?

未完待续,更新中。。。

原文地址:https://www.jb51.cc/wenti/3279921.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐