聂伟柱_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 变量定义的特点

  1. var关键字不是必须的,可以省略,但不建议省略
  2. 变量名可以重复定义

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操作符

  1. 作用:判断指定的变量数据类型

  2. 写法:

typeof(变量名) 或 typeof 变量名
  1. 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 函数的声明

一个函数的声明(或者说是函数的定义)包含:

  1. 关键字function
  2. 函数名称
  3. 参数列表,包围在括号中并由逗号分隔
  4. 定义函数的 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字符串

学习心得

​ 在这几天的学习中我渐渐感觉到自己对代码的熟练度很差,以前学习过的东西都忘记了,另外原因就是部分方法不知道在什么地方合理运用,感觉写的东西看起来太多,太乱。

标签

评论


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1