JavaScript快速上手 | 青训营

39 阅读4分钟

今天的课程学了一些案例,别人已经总结得很好了。以下为个人一写自学笔记。

【较为系统的笔记,强烈推荐】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声明的变量会被提前(相当与声明提前,但初始化并未提前)。letconst不会被提前。注意:函数声明也会被提前,也就是函数可以在声明前使用。

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__(隐式原型)来访问该属性。当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了。

todo