JavaScript知识点总结(未完待续)
2020/3/1 11:15:01
本文主要是介绍JavaScript知识点总结(未完待续),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、变量
1. 数据类型
-
基本数据类型
-
String
-
Number
-
Boolean
-
null
特殊:
typeof null === 'Object' //true
-
Undefined
-
Symbol 符号(ES6新增)
-
-
引用数据类型
- Object
- Function
- Array
- Date
- RegExp
- Object
-
基本数据类型和引用数据类型的区别(存储位置不同)
- 原始数据类型直接存储在栈(
stack
)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储; - 引用数据类型存储在堆(
heap
)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体
- 原始数据类型直接存储在栈(
数据封装类对象:Object
、Array
、Boolean
、Number
和 String
其他对象:Function
、Arguments
、Math
、Date
、RegExp
、Error
2. 类型判断
2.1 null
typeof null === 'Object' //true
null
是唯一一个用typeof
检测会返回object
的基本类型值(注意‘基本’两字)
原因:不同的对象在底层都表示为二进制 在JavaScript中二进制前三位为0的话都会被判断为object类型 null的二进制表示全是0,自然前三位也是0 所以 typeof null === “object”
2.2 引用类型的判断
参考链接:深入理解JS的类型、值、类型转换
2.2.1 typeof
- typeof 除了能判断基本类型、Object外,还能判断function类型
2.2.2 instanceof
-
判断对象用 instanceof,其内部机制是通过原型链来判断的
-
instanceof原理:判断实例对象的
__proto__
属性,和构造函数的prototype
属性,是否为同一个引用(是否指向同一个地址) -
注意1:虽然说,实例是由构造函数 new 出来的,但是实例的
__proto__
属性引用的是构造函数的prototype
。也就是说,实例的__proto__
属性与构造函数本身无关。注意2:在原型链上,原型的上面可能还会有原型,以此类推往上走,继续找
__proto__
属性。这条链上如果能找到, instanceof 的返回结果也是 true。
我们也可以试着实现一下 instanceof function instanceof(left, right) { // 获得类型的原型 let prototype = right.prototype // 获得对象的原型 left = left.__proto__ // 判断对象的类型是否等于类型的原型 while (true) { if (left === null) return false if (prototype === left) return true left = left.__proto__ } } 复制代码
- 分析一个问题
问题:已知A继承了B,B继承了C。怎么判断 a 是由A直接生成的实例,还是B直接生成的实例呢?还是C直接生成的实例呢?
分析:这就要用到原型的constructor
属性了。
foo.__proto__.constructor === Foo
的结果为true,但是foo.__proto__.constructor === Object
的结果为false。
所以,用 consturctor判断就比用 instanceof判断,更为严谨。
- 如果我们想获得一个变量的正确类型,可以通过
Object.prototype.toString.call(xx)
3. 类型转换
2.3.1 显示类型转换
-
转换成字符串 String()
toString() 可以被显式调用,或者在需要字符串化时自动调用
null 转换为 "null",undefined 转换为 "undefined",true 转换为 "true"。 数字的字符串化则遵循通用规则 极小和极大的 数字使用指数形式:
// 1.07 连续乘以七个 1000 var a = 1.07 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000; // 七个1000一共21位数字 a.toString(); // "1.07e21" 复制代码
数组的默认 toString() 方法经过了重新定义,将所有单元字符串化以后再用 "," 连接起来
var a = [1,2,3]; a.toString(); // "1,2,3" 复制代码
-
转换成数字 Number()
其中 true 转换为 1,false 转换为 0。undefined 转换为 NaN,null 转换为 0。 处理失败 时返回 NaN(处理数字常量失败时会产生语法错误)
-
转换成布尔值 Boolean()
• u
这篇关于JavaScript知识点总结(未完待续)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南