聂伟柱_20210118聂伟柱
知识点总结
1 JavaScript的基础语法
1.1JavaScript中的几个概念
1.1.1 直接量
直接量(Literal)就是具体的值,即能够直接参与运算或显示的值,如字符串、数值、布尔值、正则表 达式、对象直接量、数组直接量、函数直接量等
//空字符串直接量
1 //数值直接量
true //布尔直接量
/a/g //正则表达式直接量
null //特殊值直接量
{} //空对象直接量
[] //空数组直接量
function(){} //空函数直接量,也就是函数表达式
1.1.2 转义序列
转义序列就是字符的一种表示方式(映射)。由于各种原因,很多字符无法直接在代码中输入或输出, 只能通过转义序列间接表示
-
Unicode 转义序列方法:\u + 4位十六进制数字。
-
Latin-1 转义序列方法:\x + 2位十六进制数字。
//对于字符“©”,Unicode转义为\u00A9,ASCII 转义为 \xA9 document.write("\xa9"); //Latin-1 显示字符©
document.write("\u00a9"); //Unicode 显示字符©
1.1.3 标识符
标识符(Identifier)就是名称的专业术语。JavaScript标识符包括变量名、函数名、参数名和属性名。
合法的标识符应该注意以下强制规则:
- 第一个字符应该是字母、下划线(_)或美元符号($)。
- 除了第一个字符外,其他位置可以使用Unicode字符。
- 不能与JavaScript关键字、保留字重名。
- 可以使用Unicode转义序列。
1.2.4 关键字
关键字就是 ECMA-262 规定的 JavaScript 语言内部使用的一组名称(或称为命令)。这些名称具有特 定的用途,用户不能自定义同名的标识符。具体说明如表所示
break | delete | if | this | while |
---|---|---|---|---|
case | do | in | throw | with |
catch | else | instanceof | try | |
continue | finally | new | typeof | |
debugger | for | return | var | |
default | function | switch | void |
1.1.5 保留字
保留字就是 ECMA-262 规定的 JavaScript 语言内部预备使用的一组名称(或称为命令)。这些名称目 前还没有具体的用途,是为 JavaScript 升级版本预留备用的,建议用户不要使用。具体说明如表所示
abstract | double | goto | native | static |
---|---|---|---|---|
boolean | enum | implements | package | super |
byte | export | import | private | synchronized |
char | extends | int | protected | throws |
class | final | interface | public | transient |
const | float | long | short | volatile |
补充:ECMAScript 3 将 Java 所有关键字都列为保留字,而 ECMAScript 5 规定较为灵活例如,在 非严格模式下,仅规定 class、const、enums、export、extends、import、super 为保留字, 其他 ECMAScript 3 保留字可以自由使用;在严格模式下,ECMAScript 5 变得更加谨慎,严格限 制 implements、interface、let、package、private、protected、public、static、yield、 eval(非保留字)、arguments(非保留字)的使用
1.1.6 转义字符
转义字符是字符的一种间接表示方式。在特殊语境中,无法直接使用字符自身。
由于 JavaScript 已经赋予了双引号为字符串直接量的标识符,如果在字符串中包含双引号,就必须使用 转义字符表示
JavaScript 定义反斜杠加上字符可以表示字符自身。注意,一些字符加上反斜杠后会表示特殊字符,而 不是原字符本身,这些特殊转义字符被称为转义序列,具体说明如表所示
序列 | 代表字符 |
---|---|
\0 | Null字符(\u0000) |
\b | 退格符(\u0008) |
\t | 水平制表符(\u0009) |
\n | 换行符(\u000A) |
\v | 垂直制表符(\u000B) |
\f | 换页符(\u000C) |
\r | 回车符(\u000D) |
\" |
双引号(\u0022) |
\' |
撇号或单引号(\u0027) |
\\ |
反斜杠(\u005C) |
\xXX | 由2位十六进制数值XX指定的Latin-1字符 |
\uXXXX | 由4位十六进制数值XXXX指定的Unicode字符 |
\XXX | 由1~3位八进制数值(000到377)指定的Latin-1字符,可表示256个字符。如果\251表示版本符号。注意,ECMAScript 3.0 不支持,考虑到兼容性不建议使用。 |
1.2 变量
变量相当于容器,值相当于容器内装的东西,而变量名就是容器上贴着的标签,通过标签可以找到 变 量,以便读、写它存储的值
1.2.1 声明变量
常用的方式为:
var 变量名 = 初始化值;
在一个 var 语句中,可以声明一个或多个变量,也可以为变量赋值,未赋值的变量初始化为 undefined(未定义)值。当声明多个变量时,应使用逗号运算符分隔
var a; //声明一个变量
var a,b,c; //声明多个变量
vaar b = 1; //声明并赋值
alert(a); //返回 undefined
alert(b); //返回 1
可以重复声明同一个变量,也可以反复初始化变量的值
var a = 1;
var a = 2;
var a = 3;
alert(a); //返回 3
注意:
在非严格模式下,JavaScript 允许不声明变量就直接为其赋值,这是因为 JavaScript 解释器能够自动隐 式声明变量。隐式声明的变量总是作为全局变量使用。在严格模式下,变量必须先声明,然后才能使 用。
"use strict"; //严格模式
a = 3; //报错(a未定义)
1.2.2 变量定义的特点
- var关键字不是必须的,可以省略,但不建议省略
- 变量名可以重复定义
1.2.3 变量作用域
在 JavaScript 中, 对象和函数同样也是变量,变量作用域为可访问变量,对象,函数的集合。
变量作用域(Scope)是指变量在程序中可以访问的有效范围,也称为变量的可见性。
JavaScript 变量可以分为全局变量和局部变量:
- 全局变量:不是声明在函数体内部的变量,变量在整个页面脚本中都是可见的,可以被自由访问。
- 局部变量:变量仅能在声明的函数内部可见,函数外是不允许访问的。只要函数运行完毕,变量就 会被删除
1.2.4 局部变量
只能在函数内部访问
//此处不能调用 carName变量
function myFunction() {
var carName = "HongQi";
//函数内可调用 carName 变量
}
alert(carName); //error:carName is not defined
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁
1.2.5 全局变量
网页中所有脚本和函数均可使用
var carName = "HongQi";
//此处可调用 carName 变量
function myFunction() {
//函数内可调用 carName 变量
}
向未声明的 javascript 变量来分配值
如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。 如:
ycdl = "云创动力"; //注:前面没有var
这样声明一个全局变量,哪怕这个变量是声明在函数内部它也是一个全局变量。
全局变量是 window 对象,所有数据变量都属于 window 对象
myFunction();
//此处可以使用 window.carName
document.getElementById("demo").innerHTML =
"我可以显示" + window.carName;
function myFunction(){
carName = "HongQi"; //全局变量
}
1.3 数据类型
在JavaScript中,数据类型可以分为原始类型和引用类型。
1.3.1 五种原始数据类型:
类型 | 说明 |
---|---|
Number | 数值型:整型和浮点数 |
Boolean | 布尔类型:true/false |
String | 字符串类型:包含字符和字符串 |
Null | 只有一个值null |
Yndefined | 未定义/变量未初始化时的类型,只有一个值undefined |
1.3.2 typeof操作符
-
作用:判断指定的变量数据类型
-
写法:
typeof(变量名) 或 typeof 变量名
-
null 与 undefined 的区别:
null: 是一个object类型,但没有值,可以认为是引用类型的占位符
undefined:未初始化的类型,不知道是什么类型
1.3 流程控制语句
高级语言中的三种基本结构:顺序、分支、循环
1.3.1 if判断
if 语句
在一个指定的条件成立时执行代码。
if(条件表达式) {
//代码块;
}
if...else 语句
在指定的条件成立时执行代码,当条件不成立时执行另外的代码。
if(条件表达式) {
//代码块;
}else {
//代码块;
}
if...else if....else 语句
可以选择执行若干块代码中的一个。
1.3.2 循环
for 语句
循环指定次数
for (var i=0; i<10; i++) {
//需要执行的代码;
}
while语句:
当指定的条件为 true 时循环执行代码
while (条件表达式) {
// 需要执行的代码;
}
do-while语句:
最少执行1次循环
do {
// 需要执行的代码;
}
while (条件表达式)
break和continue
- break: 跳出整个循环
- continue:跳出本次循环
1.4 函数
JavaScript 使用关键字 function 定义函数。
函数可以通过声明定义,也可以是一个表达式。
通俗的讲,可以将函数理解为 用一堆JavaScript代码,来完成某个功能
1.4.1 函数的声明
一个函数的声明(或者说是函数的定义)包含:
- 关键字function
- 函数名称
- 参数列表,包围在括号中并由逗号分隔
- 定义函数的 JavaScript 语句,用大括号 {} 括起来
函数声明后不会立即执行,会在我们需要的时候调用。
原始参数(比如一个具体的数字)被作为值传递给函数;值被传递给函数,如果被调用函数改变了这个 参数的值,这样的改变不会影响到全局或调用函数。
var num = 10;
var r1 = square(10); // 调用函数
num = 11;
如果你传递一个对象(即一个非原始值,例如 Array 或用户自定义的对象)作为参数,而函数改变了这 个对象的属性,这样的改变对函数外部是可见的,如下面的例子所示:
function myFunc(theObject) {
theObject.make = "Toyota";
}
var mycar = {make: "Honda", model: "Accord", year: 1998};
var x, y;
x = mycar.make; // x获取的值为 "Honda"
myFunc(mycar);
y = mycar.make; // y获取的值为 "Toyota"
// (make属性被函数改变了)
分号是用来分隔可执行JavaScript语句。
由于函数声明不是一个可执行语句,所以不以分号结束
1.4.2 函数表达式
JavaScript 函数可以通过一个表达式定义。
函数表达式可以存储在变量中。
在函数表达式存储在变量后,变量也可作为一个函数使用。
以上函数实际上是一个 匿名函数 (函数没有名称)。
函数存储在变量中,不需要函数名称,通常通过变量名来调用。
上述函数以分号结尾,因为它是一个执行语句
1.4.3 Function()构造函数
函数同样可以通过内置的 JavaScript 函数构造器(Function())定义。
new Function ([arg1[, arg2[, ...argN]],] functionBody)
-
arg1, arg2, ... argN
参数名称是一个有效的JavaScript标识符的字符串,或者一个用逗号分隔的有效字符串的列表;例 如“ × ”,“ theValue ”,或“ a,b ”
-
functionBody
一个含有包括函数定义的 JavaScript 语句的字符串
var sum = new Function("square", "return number * number");
1.4.4 调用函数
定义一个函数并不会自动的执行它。定义了函数仅仅是赋予函数以名称并明确函数被调用时该做些什 么。调用函数才会以给定的参数真正执行这些动作。
函数一定要处于调用它们的域(范围)中,但是函数的声明可以被提升(出现在调用语句之后)
提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为
console.log(square(5)); // 调用
function square(n) { return n*n } // 声明
函数域是指函数声明时的所在的地方,或者函数在顶层被声明时指整个程序。
注意只有使用如上的语法形式(即 function funcName(){} )才可以。而下面的代码是无效 的。就是说,函数提升仅适用于函数声明,而不适用于函数表达式。
console.log(square); // square is hoisted with an initial value undefined.
console.log(square(2)); // TypeError: square is not a function
var square = function (n) {
return n * n;
}
函数可以被递归,就是说函数可以调用其本身。例如,下面这个函数就是用递归计算阶乘:
function factorial(n){
if ((n == 0) || (n == 1))
return 1;
else
return (n * factorial(n - 1));
}
2 json
2.1 json的语法格式
json对象有三种数据格式,分别如下:
类型 | 语法 | 解释 |
---|---|---|
对象类型 | {name:value,name:value...} | 其中name是字符串类型,而value是任意类型 |
数组/集合类型 | [value,value,value...] | 其中value是任意类型 |
混合类型 | [{},{}... ...] 或 {name:[]... ...} | 合理包裹嵌套对象类型和数组类型 |
JSON是存储和交换文本信息的语法,类似 XML。
JSON 比 XML 更小、更快,更易解析。
2.2 JSON对象及JSON字符串转换
JSON.parse(jsonStr); // json字符串 --> json 对象
JSON.stringify(json); // json对象 --> json字符串
学习心得
在这几天的学习中我渐渐感觉到自己对代码的熟练度很差,以前学习过的东西都忘记了,另外原因就是部分方法不知道在什么地方合理运用,感觉写的东西看起来太多,太乱。
近期评论