JavaScript引用类型
Posted 未夏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript引用类型相关的知识,希望对你有一定的参考价值。
Object类型
创建Object
对象有两种方式:
new Object()
- 对象字面量表示法
对象字面量表示法定义对象时,实际上不会调用Object的构造函数(Firefox2及更早版本除外)
Array类型
创建Array
对象有两种方式:
new Array()
- 数组字面量表示法
检测数组类型
instanceof
操作符的不足:
如果同个WEB页面存在多个框架,框架1里创建一个数组array
,在框架2中用instanceof
检测数组array
,返回结果并不是true
,而是false
。这是因为array instanceof Array
实际上相当于windows1.array instanceof windows2.Array
Array.isArray()
方法用来检测某对象是否时数组,它的不足之处是部分浏览器版本不支持该方法。
转换方法
数组转字符串
toString()
、toLocalString()
或valueOf()
方法可以将数组转换为字符串,每项以,
分隔自定义分隔符
join()
方法,可以指定字符串的分隔符
重排序
反转数组
reverse
方法sort
方法该方法默认将每个元素转为字符串比较大小,较小值在前端。它也可以接受一个比较函数:函数接受两个参数,当返回值为-1时,说明前一项值比后一项值小,当返回值为0时,说明前一项值和后一项值相等,当返回值为1时,说明前一项值比后一项值大
操作方法
concat
获取当前数组的副本,并在这个副本末尾添加新元素,返回这个副本数组
slice
返回当前数组的一个子序列数组,起始位置必须传入,结束位置是可选参数
splice
操作数组中间的元素,可以实现删除、插入、替换三中操作。它必须传入起始位置、要删除的元素数量两个参数,插入或替换的内容是可选参数
迭代方法
迭代方法接受两个参数:
- 在每一项上运行的函数
- 第一个参数函数的执行环境的变量对象
传入的函数接受三个参数:
- 数组元素值
- 元素在数组中的索引
- 数组对象本身
缩小方法
reduce()
和reduceRight()
方法,会迭代数组的所有项,然后构建一个最终返回的值。它接受一或两个参数:
- 在每一项上调用的函数
- 可选的初始值
被调用的函数接受四个参数:
- 前一个值
- 当前值
- 元素的索引
- 数组对象
第一次迭代发生在数组的第二项上,函数返回的任何值都会作为第一个参数自动传给下一项。
Date类型
var date = new Date()
当不传递参数时,新创建的对象自动获得当前日期和时间。如果想指定日期,则需要传入表示该日期的毫秒数。为了简化这一计算过程,ECMAScript提供了两个方法Date.parse()
和Date.UTC()
将特定的日期转换为毫秒数,再通过Date
构造函数创建新对象。
var time = new Date(Date.parse("May 25,2018"));
var time2 = new Date(Date.UTC(2018,10,13,23,22,10));
Function类型
定义函数有两种方式:
函数声明
function sum(arg1,arg2) { body //函数体 }
函数表达式
var sum = function(args1,arg2) { body //函数体 };
函数声明和函数表达式的差异是解析器读取时间不一样。解析器在执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码前可用,这称为函数声明提升;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
函数内部属性arguments和this
arguments
属性它的主要用途是保存函数参数。
arguments
对象的callee
属性,是一个指针,指向拥有这个arguments
对象的函数对象。this
this
表示调用当前函数的对象。
apply、call、bind
这三个方法都可以指定this
表示的对象,apply
和call
方法会首先指定this表示的对象,然后再执行当前函数;bind
方法会创建一个函数的实例,其this
值会被绑定到指定的对象上,这个函数不会自动执行,必须再手动调用一次。
基本包装类型
var s1 = "some text";
var s2 = s1.substring(2);
当执行流访问到第二行时,首先创建String包装类型的一个实例,然后在实例上调用指定的方法,最后销毁这个实例。
引用类型与基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。
单体内置对象
内置对象指由ECMAScript实现提供的、不依赖宿主环境的对象,这些对象在ECMAScript程序执行前就已经存在了。这意味着开发人员不必显示地实例化内置对象,因为它们已经实例化了
在所有代码执行之前,作用域中就已经存在两个内置对象:Global
和Math
。在大多数ECMAScript实现中都不能直接访问Global
对象;不过,Web浏览器实现了承担该角色的windows
对象。全局变量和函数都是Global
对象的属性。
以上是关于JavaScript引用类型的主要内容,如果未能解决你的问题,请参考以下文章
从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象
VSCode自定义代码片段12——JavaScript的Promise对象