规律的制定一个计划,有助于自己的学习
需要牢记一些常用的数组,字符串,对象的一些方法,属性
例如: https://www.html.cn/doc/lodash/
第三章的相关知识点
- 一个变量在一个函数退出时就会销毁
数据类型
- 基本:Undefined, Null,String.Number,Boolean
- 引用:Object
这时,可以使用typeof
来进行判断,但是对于引用类型只能判断出是一个对象,如果需要仔细判断需要是哟很instanceof
但是值得一说的是, null 是一个空对象指针
typeof null ,也是一个对象(object),这时因为对象的二进制前两个为00所致,
undefined其实是有null 派生的, 所以, undefined==null,
为true, 这是需要注意的
Boolean的值只有两个一个为true,一个为false,
但是对于非空字符串,Boolean(“xx”)都是为true的 ,
Boolean(""), Boolean(0/null/unde) 均为false,
对于Number 类型, 浮点数的计算会产生误差;
数值、布尔值、对象和字符串值(没错,每个字符串也都有一个 toString()方法,
该方法返回字 符串的一个副本)都有 toString()方法。
但 null 和 undefined 值没有这个方法
Object 类型, 对象类型
var o= new Object()
- object 是所有对象的基础, 所有的对象都有以下的属性与方法:
constructor
:保留创建当前对象的函数, 这里o这个对象的构造函数就是:Object();hasOwnProperty
, 用于检测属性是否在当前对象的实例中(非实例的原型中),参数的属性以字符串的类型isPropertyOf
, 传入的对象是否是对象的的原型;toLocaleString()
:返回对象的字符串表示,该字符串与执行环境的地区对应。
例如: new Date().toLocaleString()
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值
*对于操作符
==
, 与!=
, 都是会做强制类型
转换的,
参数
ECMAScript 函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript 函数不介意传递进
来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数,
在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不 会有什么怨言。之所以会这样,原因是
ECMAScript 中的参数在内部是用一个数组来表示的。函数接收
到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任
何元素,无所谓;如果包含多个元素,也没有问题。实际上,在函数体内可以通过 arguments 对象来
访问这个参数数组,从而获取传递给函数的每一个参数。 其实,arguments 对象只是与数组类似(它并不是 Array
的实例),因为可以使用方括号语法访 问它的每一个元素(即第一个元素是 arguments[0],第二个元素是
argumetns[1],以此类推),使 用 length
属性来确定传递进来多少个参数。在前面的例子中,sayHi()函数的第一个参数的名字叫 name,而该参数的值也可以通过访问
arguments[0]来获取。因此,那个函数也可以像下面这样重写, 即不显式地使用命名参数
function doAdd(num1, num2) {
if(arguments.length == 1) {
alert(num1 + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + num2);
}
}
第四章的相关知识点
数组的 length 属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移 除项或向数组中添加新项
可以用来在数组最后一项添加新项,
var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
colors[colors.length] = "black"; //(在位置 3)添加一种颜色
colors[colors.length] = "brown"; //(在位置 4)再添加一种颜色
数组的迭代方法:
对于正则表达式,还是需要在多加学习,使用.练习
在函数内部,有两个特殊的对象:arguments 和 this
基本包装类型
使用字面量来创建实例的时候, 此时的constructor
,不在指向构造函数,会直接指向Object,
在上面的代码中,我们将 Person.prototype 设置为等于一个以对象字面量形式创建的新对象。
最终结果相同,但有一个例外:constructor 属性不再指向 Person 了。前面曾经介绍过,每创建一 个函数,就会同时创建它的
prototype 对象,这个对象也会自动获得 constructor 属性。而我们在 这里使用的语法,本质上完全重写了默认的
prototype 对象,因此 constructor 属性也就变成了新 对象的 constructor 属性(指向 Object
构造函数),不再指向 Person 函数。此时,尽管 instanceof 操作符还能返回正确的结果,但通过 constructor
已经无法确定对象的类型了,如下所示。