05|引用类型

2019-11-29  本文已影响0人  井润

04|引用类型

其中本文主要是讲解引用类型!

其中对Object 和 Array没有讲太多便进入到了比较关键的 数组检测的情境下来了:

有两种方法检测对应的对象是否是数组:

if(value instanceof Array){
    //TODO
}

但是问题是,以上代码只考虑到只有一个全局执行环境,如果说网页中包含多个框架的话,不同的全局执行环境下,存在不同的Array构造函数!

ES5中提供了一个方法用爱确定最终某个值是否是数组,不管是在那个执行环境中创建的,代码如下所示:

if(Array.isArray(value)){
    //TODO
}

01|转换方法

对应的所有的对象都有三个方法分别为:

  1. toLocalString
  2. toString
  3. valueOf
const colors = ["a","b","c"];
console.log(colors.toString());//a,b,c
console.log(colors.valueOf());//["a", "b", "c"]
console.log(colors);//["a", "b", "c"]

toString的方法会返回一个每个值的字符串形式拼接成字符串!

其实对应的toLocalString和toString是有区别的,与toString和valueOf不同的是,为了取得每一项的值,调用每一项的toLocaleString的方法,而不是toString方法!

let Person01 = {
    toLocaleString(){return "ProbeDream";}
    toString(){return "ProbeDream";}
}
let Person02 = {
    toLocaleString(){return "1";}
    toString(){return "2";}
}   
const people = [Person01,Person02];
console.log(people.toLocaleString());//ProbeDream 1
console.log(people.toString());//ProbeDream 2

对应的join方法可以帮助我们将数组转换为字符串类型并且以一定格式的形式间隔开来!

["A","B","C"].join("||"); // "A||B||C"
console.log(typeof ["A","B","C"].join("||"));//string

02|栈方法

  1. push 添加内容到数组最后一项 改变原数组** 返回数组长度

  2. pop 删除数组最后一项 改变原数组 返回数组长度

  3. shift 删除第一项 改变原数组 返回数组长度

  4. unshift 插入第一项 改变原数组 返回数组长度

对应的栈方法为1,2 特性为后进先出! 像油桶

对应的队列方法为3,4特性为先进先出! 像油管

03|重排序方法

  1. sort: 按照字典排序 先调用toString方法之后 比较字符串确定如何排序!
    1. 对应的比较函数传入两个参数,
    2. 如果第一个应改为与第二个之前返回负数
    3. 如果两个相等返回0
    4. 如果第一个改为第二个之后返回正数!
    5. 如果说比较结果为正数倒序排列,否则升序排列如果为0则不变!
  2. reverse: 反转数组顺序排列

04|操作方法

console.log([1,2,3,4,5,6].slice(1,3)); //2,3

对应的splice是数组中最强大的方法了:

splice()提供了三个参数,返回被操作之后的项:

[1,2,3,4,5].splice(0,1);
[1,2,3,4,5].splice(0,2);

05|位置方法

寻找未知的方法:

分别都是穿两个参数,第二个是可选的,第一个是需要查找的项!

06|迭代方法

其中对应的迭代方法在ES5中有5个,每个方法都接受两个参数,每一项运行的方法和运行该函数的作用域对象!(可选 影响this的指向)

07|归并方法

两个归并数组的方法,reduce和reduceRight,两个方法都会迭代所有项,并且构建一个最终返回的值!

对应的接收两个参数:

08|Date

之后便对Data类型进行了介绍,对应的一些事件相关的API!

09|RegExp

这里讲解的主要是常常被前端忽略的正则表达式,但是是非常有用的一部分!

10|Function

函数定义的常见方式:函数声明和函数表达式

  1. 函数声明
function sum(num01,num02){
    return num01 + num02;
}
  1. 函数表达式
let sum = function(num01,num02){
    return num01,num02;
}
//其实这种方式等价于下面这样
let sum = new Function("num01","num02","return num01+num02");

Function构造器中可以传入任意数量的参数,最后的参数被看成是函数的函数体!

推荐使用第一种,第二种会有两次解析 第一次是常规解析JS代码,第二次是解析传入构造函数中的字符串! 对应的性能会受一定的影响. 函数是对象,函数名是指针 这句话我们应该很好理解!

于是我们可以这么理解:

console.log(sum(1,2)); //函数声明提升
function sum(num01,num02){
    return num01 + num02;
}
console.log(sum(1,2)); //Cannot access 'sum' before initialization
let  sum =function (num01,num02){
    return num01 + num02;
}

对应的函数表达式的提前使用会出现对应的问题,不能在sum初始化之前访问!

11|包装类型

对应的包装类型的出现,主要是因为普通的String,Number和Boolean类型的值或者变量是不能够直接调用方法的,那么我们常常使用到的字符串为什么能够调用这些所谓的方法!

其实就是所谓的包装类型来做的!

最主要的是快速熟悉对应的String中的方法!

其中还介绍到了对应的全局对象,对应的就是作为一个终极的兜底儿对象定义的,不属于任何其他对象的属性和方法,最终都是它的属性和方法,例如说 isNaN,isFinite,parseInt,parseFloat 对应的还有一些方法值得我们学习的:

  1. encodeURI

有效的URI不能够包含某些字符,例如说空格,而这两个URI编码方法就可以对URI进行编码,用特殊的UTF-8编码替换所有无效的字符.从而让浏览器能够接受和理解!

encodeURI作用于整个URI! 不会对本身属于URI的特殊字符进行编码!

encodeURIComponent对应的作用于URI中的某一段进行编码! 会对非标准的字符进行编码

12|Math

其中主要是包含对应的科学技术的一些API!

上一篇 下一篇

猜你喜欢

热点阅读