今天的课程学了一些案例,别人已经总结得很好了。以下为个人一写自学笔记。
【较为系统的笔记,强烈推荐】JavaScript笔记 - CSDN博客
【简洁,快速过一遍,推荐】JavaScript学习笔记 - 知乎 (zhihu.com)
【有一定进阶】ES6 入门教程 - ECMAScript 6入门 (ruanyifeng.com)
【查缺补漏】《JavaScript教程》笔记 | 阮野的博客 (ruanye.github.io)
-
单行注释
//
;多行注释/**/
-
声明变量(四种方式)
a=10;//全局变量(不严格模式)
var b=10;//全局或局部作用域
let c=10;//局部变量(块作用域),推荐
const d=10;//常量
-
合法的标识符由 英文字母、
_
、$
开头,后还可跟数字组成。 -
未初始化的变量值为
undefined
。使用未声明的变量会产生ReferenceError
。 -
var
声明的变量会被提前(相当与声明提前,但初始化并未提前)。let
和const
不会被提前。注意:函数声明也会被提前,也就是函数可以在声明前使用。
1.1 数据类型
六种数据类型:
- 字符串型(String)
- 数值型(Number)
- 布尔型(Boolean)
- undefined型(Undefined)
- null型(Null)
- 对象型(Object)
//判别类型
console.log(typeof undefined);//undefined
//强制类型转换
// other->String
let a=10;
a=a.toString();
a=a+"";
a=String(a);//null,undefined用此方法
//String->Number
let a="10";
let b="10.1"
a=parseInt(a);
b=parseFloat(b);
1.2 运算符
==
&!=
:不严格相等判断,进行必要的类型转换后再判断;===
&!==
:严格相等判断,不进行类型转换(类型不符则一定不等);
1.3 控制结构
let list=[...];
for(let a in list){
...
}
1.4 对象
//创建对象
let a=new Object();
a.attr=10;
...
console.log(a,a.attr,a['attr']);
delete a.attr//删除a的attr属性
let b={
attr1:10,
...
}
console.log(b);
//枚举遍历对象中的属性
for(let attr in b){
...
}
1.5 函数
JavaScript中的函数也是一个对象,使用typeof检查一个函数对象时,会返回function。
//使用 函数对象 来创建一个函数(几乎不用)
let func=new Function("statements;");
//使用 函数声明 来创建一个函数
function name(params1[,params2=values,...params3])
{
statements;
}
//其中params2是默认形参,params3是剩余形参
//使用 函数表达式 来创建一个函数
let func=function(params1[,params2=values,...params3]){
statements;
}
//箭头函数
(params1[,params2=values,...params3]) => { statements }
//立即执行函数,立即执行函数往往只会执行一次
(function(){})()
(function(){}())
//对象中的函数
let obj={
attr1:10,
func:function(){},
...
}
obj.func();
//利用函数创建类
function Person(name,age)
{
this.name=name;
thia.age=age;
}
Person.prototype.getInfo=function(){
console.log(this.name,this.age);
}
jack=new Person("jack",18);
console.log(jack instanceof Person);
console.log(jack.toString());//toString属于Object对象,而所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。
jack=null;//直接垃圾回收
-
注意:函数声明会被提前。函数表达式赋值的对象会被提前,但其值为
undefined
。 -
this对象:解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称为函数执行的上下文对象,根据函数的调用方式的不同,this会指向不同的对象。
- 以函数的形式调用时,this永远都是window
- 以方法的形式调用时,this就是调用方法的那个对象
- 当以构造函数的形式调用时,this就是新创建的那个对象
-
prototype 我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象,这个对象就是我们所谓的原型对象,即显式原型,原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。 如果函数作为普通函数调用prototype没有任何作用,当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以通过
__proto__
(隐式原型)来访问该属性。当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了。