1.JS概念
-
JavaScript 最开始是专门为浏览器设计的一门语言,但是现在也被用于很多其他的环境。
如今,JavaScript 已经成为了与 HTML/CSS 完全集成的,使用最广泛的浏览器语言。 -
运行JavaScript有多种方式,可以直接在浏览器的控制台编写运行;也可以编写一个独立的js文件,然后在Html文件中引入,(这两种方法由浏览器解释执行,是以前唯一的方式)。也可以用编辑软件如Webstrom或VSCode编写独立的js文件,由安装好的Node.js解释执行运行( node-v10.11.0-64位下载)。
2.基本语法
- JS的脚本代码必须位于标签之间,而这整体可以放置在整个HTML页面的和部分;也可以位于外部的JS文件中,再在HTML页面中进行引入;
- JS的标识符按以下规则组合:第一个字符只能为字母、
_
、$
之一,其他字符可以是字母、_
、$
、数字,一般书写方式采用驼峰大小写格式; - Js对大小写敏感,例如:A和a有着不同的含义;
3.变量
我们可以使用 var、let 或 const 声明变量来存储数据。
-
let — 现代的变量声明方式。
-
var — 老旧的变量声明方式。一般情况下,我们不会再使用它。但是,我们会在 旧时的 “var” 章节介绍 var 和 let 的微妙差别,以防你需要它们。
-
const — 类似于 let,但是变量的值无法被修改。
变量应当以一种容易理解变量内部是什么的方式进行命名。
4.操作符
-
一元操作符 ++ –
-
布尔操作符 && || !
除下列值为假外其余皆为真: false、null、undefined、‘’、0、NaN
&&和||属于 短路操作
-
算术操作符 + - * / %
-
关系操作符 <> <=>= == === != !==
注意: ===称为全等(值和类型)。
-
条件(问号)操作符 ? :
-
赋值操作符 = += -+ *= /= %=
5.函数
函数是一个程序被调用执行时的可重复使用的代码块,可以装任意多的语句,大致格式如下:
function functionname()
{
//代码块
}
此处的function只能小写,并且调用时要注意函数名的大小写
- 在调用函数时,可以传递参数,用,隔开;
- 赋值给未声明的变量,则变量会自动作为window的属性;
- 若定义了两个名字一样函数,则名字属于后定义的函数;
6.对象
对象 Object 是ECMAScript 中使用最多的一个类型。我们常将数据和方法封装在对象中。
创建对象有如下两种方式:
方式一:new
var person = new Object();//生成空对象
person.name = 'Elon Musk';//设置对象的属性
person.age = 46;
person.job = 'SpaceX Rocket';
person.sayName = function(){ //设置对象的方法/函数,注意此处
console.log(this.name);
};
方式二:字面量
var person = {
name: 'Lary Page',
age: 47,
job: 'Software Engineer',
sayName: function(){ //注意此处
console.log(this.name);
}
};
console.log(person.job);
person.sayName();
7.数组
数组是一种特殊的对象,适用于存储和管理有序的数据项。
-
声明:
方括号 (常见用法) let arr = [item1, item2…];
new Array (极其少见) let arr = new Array(item1, item2…);
调用 new Array(number) 会创建一个给定长度的数组,但不含有任何项。
length 属性是数组的长度,准确地说,它是数组最后一个数字索引值加一。它由数组方法自动调整。
如果我们手动缩短 length,那么数组就会被截断。
-
遍历数组的元素:
for (let i=0; i<arr.length; i++) — 运行得最快,可兼容旧版本浏览器。
for (let item of arr) — 现代语法,只能访问 items。
-
数组的创建:
直接new一个新数组
var objectname = new Object();
直接创建包含几个字符串的数组
var objectname = {
//属性和方法;
}
- 方法:
- 元素联合
var colors = ['red', 'green', 'blue'];
console.log(colors.join(',')); //red,green,blue
console.log(colors.join('||')); //red||green||blue
- 堆栈方法(后进先出)
var student = [];
var count = student.push('red');//末尾推入
console.log(count);
student.push('yellow');
var item = student.pop();//末尾弹出
console.log(item);
- 队列方法 (先进先出)
var arrayname = [];
arrayname.push('data1','data2');//末尾添加
var item = arrayname.shift();//前端弹出
console.log(item);//'data1'
- 反转数组项
var values = [1, 2, 3, 4, 5];
values.reverse();
console.log(values); //5,4,3,2,1
- 链接方法
var colors1 = ['red', 'green', 'blue'];
var colors2 = ['yellow', 'black'];
console.log(colors1.concat(colors2));
console.log(colors2.concat(colors1));
console.log(colors2.concat('brown'));
console.log(color2)//注意:concat返回一个新数组,原数组没改变
- 分片方法 此方法不会影响原始数组
slice()
,它能够基于当前数组中的一或多个项创建一个新数组。 slice()
方法可以接受一或两个参数,即要返回项的起始和结束位置。
var arrayname = ['data1','data2','data3','data4','data5'];
var arrayname1 = arratname.slice(2,4);
console.log(arrayname1);//data3,data4
8.语句
- if…else语句
if (condition)//使用小写的if
{
//当条件为true时执行的代码
}
else
{
//当条件不为true时执行的代码
}
- switch语句
switch(n)
{
case 1 :
//执行代码块1
break;//阻止代码自动向下一个case执行
case 2 :
//执行代码块2
break;
default:
//匹配不存在时做的事情
}
- for循环
for (代码块开始前执行的语句;循环的条件;代码块执行后的执行语句)
{
//代码块
}
- while循环
while(条件)
{
//代码块
}
- break和continue语句
break用于跳出循环;
continue中断当前的循环中的迭代,然后继续循环下一个迭代;
9.闭包
闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。
闭包就是就是函数的“堆栈”在函数返回后并不释放,我们也可以理解为这些函数堆栈并不在栈上分配而是在堆上分配。
当在一个函数内定义另外一个函数就会产生闭包。
例如:
function greeting(name) {
var text = 'Hello ' + name; // local variable
// 每次调用时,产生闭包,并返回内部函数对象给调用者
return function() { console.log(text); }//注意该函数无名称,称为匿名函数
}
var sayHello = greeting('Closure');//调用greeting()返回了什么?
sayHello(); // 注意此处的使用方法。通过闭包访问到了局部变量text
上述代码的执行结果是:Hello Closure,因为sayHello指向了greeting函数对象,sayHello()则对其进行调用,greeting函数执行完毕后将返回greeting函数内定义的匿名函数对象,而该匿名函数仍然可以访问到了定义在greeting之内的局部变量text,注意此时我们已从greeting函数中退出了(但请留意,也只有该内部匿名函数能访问,其它任何代码都不能访问)。