极客时间-重学前端笔记-JavaScript

JavaScript类型:关于类型,有哪些你不知道的细节?

1、为什么有的编程规范要求用 void 0 代替 undefined?

A:undefined是变量,不是关键字,这是JavaScript设计的一个失误,void运算把任何表达式变成undefined值,为了防止被篡改,建议用void 0代替undefined
null是关键字可以放心使用。
null和undefined的区别?——undefined表示未定义,null表示定义了但是值为空,一般不建议直接赋值undefined,但是可以将对象初始化为null 。


2、字符串有最大长度吗?

A:JavaScript的字符串有最大长度,为2^53 - 1,但这个最大长度不是你所理解的“字符数”,因为 String 的意义并非“字符串”,而是字符串的 UTF16 编码,即字符串有最大长度与编码方式有关。

3、0.1 + 0.2 不是等于 0.3 么?为什么 JavaScript 里不是这样的?

A:浮点数是有精度的,0.1 + 0.2 无限趋近与0.3,但是不等于0.3,表达式可以写为Math.abs(0.1 + 0.2) < Math.EPSILON

4、ES6 新加入的 Symbol 是个什么东西?

ES6新加入Symbol类型,表示一切非字符串的对象key的集合,在 ES6 规范中,整个对象系统被用 Symbol 重塑。由于Symbol的唯一标识性,常用来定义属性。ES6使用Symbol暴露常用的属性

Symbol不能被new的方式创建。

5、为什么给对象添加的方法能用在基本类型上?

.运算符实现封箱操作,根据基本类型创建出一个临时对象,基于类型使用该对象的方法。

JavaScript对象:我们真的需要模拟类吗?

描述对象的方法有两种:1)基于类,如Java、C++ 2)基于原型,如JavaScript

JavaScript的早期设计是基于原型的,而不是基于类的。
基于原型设计的最显著特点是可以动态的修改对象属性,这与运行时是一致的
对象复制:1)使的新对象持有一个原型的引用,即浅拷贝 2)复制整个对象,复制对象与元对象解耦,即深拷贝
JavaScript的对象复制是浅拷贝,只复制对象的引用。
在ES6之前,使用new和function结合的方式创建对象。

ES6增加了Class的概念,与Java类似
class A {
  constructor(params) {
    // this指针给属性赋值 属性放在构造函数
  }
  // getter/setter

  // method
}
ES6也提供了原型创建对象的三个方法:
Object.create
Object.getPrototypeOf
Object.setPrototypeOf

建议采用Class的方式创建对象。

异步任务

宏观任务:由宿主发起
微观任务:javascript引擎发起
宏观任务包含多个微观任务组成的队列
Promise(微观任务)
setTimeout(宏观任务, API都是宏观任务)
掌握promise用法
Promise和setTimeout调用顺序——微观任务在宏观任务之前调用
async/await:
async 函数必定返回 Promise,我们把所有返回 Promise 的函数都可以认为是异步函数。
generator/iterator 来模拟异步的方法应该被废弃


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值