一、JavaScript概述
核心包括两个部分:基本的语法构造、标准库
主要调试工具:控制台(ctrl+shift+J / F12)
标准与原名:ECMAscript
名词解释:(1)变量:其表示的值可以发生改变的量称为变量。
(2)语句:一般JavaScript中以分号结束一条语句,通常习惯上来讲一行只写一个语句。
变量命名规则:(1)由字母、数字、下划线和$美元符组合构成,但是不能以数字开头。
(2)大小写敏感,并且尽量保证使用“驼峰命名法”。
数据类型:六大数据类型,其中五大基本数据类型,一种复合数据类型
基本运算符:typeof 运算符
注释方法:(1)单行注释 //......
(2)多行注释 /*......*/
(3)文档注释 /**......*/
二、JavaScript流程控制深入
分支深入
基本描述:if结构、if-else结构、if-else if结构、switch结构
语法结构:
switch(表达式){
case 情况1: {}
break;
case 情况2: {}
break;
...
default: {}
break;
}
注意事项:
(1)switch结构的含义和if-else if基本相同,都表示对多种情况的重复判断。
(2)需要注意switch后的小括号内部必须写出一个具有可能值的表达式,并在大括号内部对所有的可能值使用case进行判断。
(3)每一个case后面的break都必须写,一个case+一个break构成一个完整的可能语句结构。
(4)如果所有的可能都不满足,则直接执行default语句所对应的内容。类似于if-else if语句中最后的else语句。
(5)switch语句末尾不需要写分号表示结束。(所有的流程控制语句末尾都不写分号,但是内部该写还是要写的)
循环深入
基本描述:while循环、do-while循环、for循环
语法结构:
for(var i in 容器){
console.log(i);
}
注意事项:
(1)三种循环的结构虽然从语法上来讲写法不尽相同,但是本质上来讲作用是一致的。
(2)对于循环语句,需要注意do-while结构语句的末尾需要加分号。(唯一需要在末尾写分号的流程控制语句)
(3)循环语句不同于分支结构,需要强烈注意循环条件与循环变量的关系,避免出现死循环。
(4)for循环结构除了标准的三个表达式写法之外,还有一种叫做【快速遍历】的编写方式,语法如上。在这种写法中,如果容器是数组,则 i 代表下标,如果容器是对象,则 i 代表属性。
(5)循环结构和分支结构混合使用,能够实现更强烈的逻辑结构。
辅助控制
基本描述:break语句、continue语句
语法结构:
循环语句(循环条件){
// ... 循环内容
// 辅助控制
}
功能作用:
break语句能够在程序执行的过程中,跳出所在的代码块或循环,使得循环立即终止。
continue语句能够在程序执行的过程中,跳出当前次所在的循环并继续开始下一次循环,循环不会立即终止。
具体案例:
for(var i=0; i<100; i++){
if(i === 10){
辅助控制
}
console.log("i当前的值是:" + i);
}
扩展思考:break和continue实际上在页面中还有一个不太被人们所普遍了解和接受的功能,叫做标志跳转。例如:break flag; 这种写法能够让程序直接从break的位置跳转到程序指定的任意位置。
三、JavaScript数据类型深入
整体深入
基本描述:六大数据类型(数字类型、字符串类型、布尔类型、undefined类型、null类型、Object类型)
注意事项:
(1)前五种称为JavaScript中的基本数据类型,而最后一种称为复杂数据类型。
(2)Object类型中包括像Array、Function等所有除了前五种数据之外的所有数据类型。
(3)JavaScript中变量存在动态类型,意味着变量赋值的时候赋予变量什么数据类型就是什么数据类型。
(4)特别强调数组Array并不是基本数据类型,也不在JS六大数据类型之内。
数字类型深入
基本描述:JavaScript中描述数字的数据类型,在console控制台中数字类型的输出是淡蓝色的。
基本表现:123、-5、0.7
注意事项:
(1)在JavaScript中数字类型并不存在像单精度Float(小数点后6位)或双精度Double(小数点后12位)这样的说法,而是统一称为数字类型。
(2)除了基本的整数和小数的表达方式之外,JavaScript中数字类型还能够允许使用科学计数法来表示。科学计数法:底数 E / e 指数。例如:3E3,表示3*10的三次方等。
理解扩展:无论对于JavaScript也好、C也好亦或是PHP等其他任何语言都好,对于数字类型的保存和表达都会存在一个叫做【精度极限】的误差问题。例如:
var num1 = 0.2;
var num2 = 0.3;
console.log((num2 - num1 ) === 0.1); // false
原因:0.1 >> 0.0001 1001 1001 1001 ... (1001无限循环)
0.2 >> 0.0011 0011 0011 0011 ... (0011无限循环)
二进制只能模仿十进制进行四舍五入,但是二进制只有0和1两个值,于是变为0舍1入,这即是计算机中部分浮点数运算时出现误差,丢失精度的根本原因。
字符串类型深入
基本描述:单双引号包裹的内容称为字符串
基本表现:'javascript'、"JavaScript"
注意事项:
(1)字符串可以使用单双引号定义,但约定统一使用单引号定义字符串。
(2)字符串中可能会引起歧义的内容记得要使用转义字符进行转义(\n、\r、\'、\"、\\等)。
(3)在console控制台中字符串类型的输出是黑色的。
(4)获取字符串长度属性length以及Unicode编码
(5)字符串的base64加密方式,包括英文加密与中文加密
操作方法:
(1)字符串截取方法:substring(beginIndex, endIndex)、substr(beginIndex, length)、slice(beginIndex, endIndex)
(2)字符串索引方法:indexOf(substr, beginIndex)、lastIndexOf(substr, endIndex)
(3)字符串替换方法:replace(oldstr, newstr)
(4)字符串分裂方法:split(separator)
(5)字符串转换方法:toUpperCase()、toLowerCase()
数组类型深入
基本描述:由中括号包裹起来的有序数据结构,每一个数组元素都有唯一的下标与之对应,下标从0开始。
基本表现:[0, "abc", 123, false, undefined, {}, ...]
注意事项:
(1)数组由中括号定义,内部元素可以存储无限多个。
(2)数组的长度length是可读写的,赋值不同得到的结果也不同。
(3)如果数组存在hole空位或者内容缺省,则使用undefined占位。
操作方法:
(1)数组末尾读写方法:push(item1, item2, ...)、pop()
(2)数组首位读写方法:unshift(item1、item2、...)、shift()
(3)数组索引方法:indexOf(item, beginIndex)、lastIndexOf(item, endIndex)
(4)数组截取方法:slice(beginIndex, endIndex)、splice(beginIndex, length, addItem1, addItem2, ...)
(5)数组合并方法:join(separator)
扩展:二维数组的结构、定义与访问
Object类型深入
基本描述:由大括号包裹的,键值对构成的数据结构为Object类型。其中键值之间用冒号分隔,键值对之间用逗号分隔。
基本表现:{ key1: value1, key2: value2, ... }
类型本质:只是一个存储数据的容器,容器并不重要,重要的是内部存储的数据。
注意事项:
(1)Object类型也叫对象类型(尽管这种叫法并不正确,但所有人默认了这种叫法)
(2)Object类型属性均为字符串类型,所以写不写引号均可。(事实也并不绝对)
(3)Object类型属性值可以是任意数据类型,如果是函数则本属性称为方法。
(4)Object类型可以通过 . 点运算符或 [] 中括号运算符对对象内部的内容进行读写。
(5)var obj = {};称为空对象
var obj = null;称为对象为空,两者根本不是同一回事
JavaScript函数深入
函数定义:通过function命令声明或通过函数表达式的方式声明
基本表现:function 函数名() {}; / var 变量名 = function () {};
注意事项:
(1)函数分为【声明】和【调用】两部分,如果只是声明了函数而没有调用,则函数等同于不存在,函数内编写的代码均不会执行。
(2)函数调用理应写在声明之后,但如果对于function命令的声明函数,写在之前也可以。
(3)在JavaScript中以函数为分界线,分为【全局作用域】和【函数作用域】两个变量生效的范围,其中函数内部也称为【局部作用域】。
(4)形参:是写在函数调用部分小括号中的参数。
(5)实参:是写在函数调用部分小括号中的参数。
(6)返回值:在函数内部通过return声明的,能够将其后面的内容返回到函数调用位置的具体的值,称为返回值。另外,return关键词还表示程序执行结束。
(7)匿名函数:没有函数名,只能通过某种特殊手段才能执行的函数就称为匿名函数。
深入研究:
内容:IIFE,全称为Immediately-Ivoked-Function-Expression,即立即执行的函数表达式。
语法:(function () {} ());或(function () {})();
作用:a. 函数不必声明,直接在声明的时候就能够立即执行。
b.IIFE因为是函数,因此能够保证在这段代码中声明的变量不会影响到外部任意部分的全局变量使用。