本篇笔记的内容是在4 - 5.3章,因为笔者是学过es6再看的JavaScript高级程序设计,所以书写代码的时候用的let
而不是 var
, 这样的话作用域的问题就有写省略了。
在这次的笔记里个人觉得比较有收获的地方是在array以及instanceof的部分,因为null与undefined的判别在本人日常书写代码的时候是比较会碰到的,还有就是array的迭代判断,筛选,splice等地方,确实收获很大。希望大家看过之后也会有自己的收获~
Arguments
ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。
function sayHi() {
console.log("Hello " + arguments[0] + ", " + arguments[1]);
}
sayHi(123,345) //hello 123, 345
但是在es6的箭头函数里arguments是不生效的。箭头函数中可用Rest代替arguments,箭头函数的注意点:
* 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
* 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
* 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
* 不可以使用yield命令,因此箭头函数不能用作Generator函数。未指定返回值的函数返回的是一个特殊的 undefined 值。
由于不存在函数签名的特性,ECMAScript 函数不能重载。
function addSomeNumber(num){
return num + 100;
}
function addSomeNumber(num) {
return num + 200;
}
var result = addSomeNumber(100); //100 + 200 = 300
基本类型与引用类型
基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象
string 在JavaScript中是基本类型,和其他语言不一样。
只能给引用类型值(Object)动态地添加属性,以便将来使用。
对象的变量赋值可以理解成指针
instanceof
instanceof 可以检测变量的类型。
let x = {name:'123'};
let y = null;
let z = undefined;
x instanceof Object // true
x instanceof Array // false
y instanceof Object // false
z instanceof Object // false
Tips:
instanceof Array
假定只有一个全局执行环境,如果是多个的话判断可能会不准确,所以对于数组的判断推荐使用Array.isArray(x)
这个函数
Array
let arr = [1,2,3];
console.log(arr) // [1, 2, 3]
console.log(arr.toString()) // 1,2,3 如果array中的item是对象的话可以覆写toString方法
console.log(arr.toLocaleString()) // 1,2,3 如果array中的item是对象的话可以覆写toLocaleString方法
console.log(arr.join('、')) // 1、2、3 join 改变item之间的分隔符
Array 的栈与队列的用法
栈用法:先进后出. push(item)
, pop()
.
队列用法:先进先出. shift()
将队首移除。 unshift(item)
向队首添加,与pop
形成反队列
let arr = [1,2,3];
arr.push(4); // arr = [1,2,3,4]
let tmp_0 = arr.pop(); // arr = [1,2,3]; tmp_0 = 4
let tmp_1 = arr.shift(); // arr = [2,3] tmp_1 = 1;
arr.unshift(5); // arr = [5,2,3] unshift()可以向队首添加值,与pop结合可以形成反队列
Array 的编辑插入删除功能
- 删除:splice(0,2) 删除数组下标0开始的两项。
- 插入:splice(2,0,”red”,”green”) 从当前数组的下标 2 开始插入字符串”red”和”green”。
- 替换:splice(2,1,”red”,”green”) 删除当前数组位置 2 的项,然后再从位置 2 开始插入字符串
“red”和”green”。
Tips: splice()方法始终都会返回一个编辑之后的数组,不会对原数组产生影响。
Array 的五个遍历方法
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
- filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
- forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
以上方法都不会修改数组中的包含的值。