JavaScript基础笔记

学习资料来源:
JavaScript权威指南
JavaScript高级程序设计
廖雪峰–JavaScript全栈教程
李炎恢JavaScript教程 第一季

基本语法

Javascript区分大小写。

标识符命名规则:

  • 第一个字符必须是一个字母、下划线_或一个美元符号$
  • 其他字符可以是字母、下划线、美元符号或数字
  • 不能把关键字、保留字、true、false和null作为标识符

ECMAScript全部关键字

ECMA-262第三版全部保留字

注释:
//单行注释
/* */多行注释

Javascript的每个语句以;结束,语句块用{}。 虽然Javascript不强制使用;,不过始终补上;是一个良好的习惯。 可选分号通用规则:如果当前语句和下一行语句无法合并解析,Javascrpt则在第一行后填补分号。 示例:

1
2
3
4
5
var a
a
=
3
console.log(a)

等价于

1
2
3
var a;
a = 3;
console.log(a);

两个例外:

  1. 如果returnbreakcontinue后紧跟着换行,则会在换行处填补分号。 示例:

    1
    2
    return
    true

    等价于

    1
    2
    return;
    true;
  2. 如果将++--用做后缀表达式,应当和表达式在同一行,否则行尾自动填补分号。 示例:

    1
    2
    3
    x
    ++
    y

    等价于

    1
    2
    x;
    ++y;

赋值语句:

1
var x = 0;

字符串也可以视为完整的语句

1
"Hello World!";

注意如果字符串不用''""包裹会抛出ReferenceError(引用错误)

数据类型

原始类型(primitive type)

Number

包含两种数值:整数和浮点数。
八进制数值字面量:前导为0
十六进制数值字面量:前导为0x
浮点类型数值包含一个小数点,且小数点后面必须至少有一位数字。由于保存浮点数值需要的内存空间比整数型数值大两倍,如果浮点数值小数点后没有数字或数字都为0会自动转化为整型。
对于过大或过小的数值可以用科学表示法e表示法,用e表示该数值的前面数值的10的指数次幂。浮点数值的范围在:Number.MIN_VALUENumber.MAX_VALUE之间。如果超过了浮点数值范围的最大值或最小值,则会出现Infinity(正无穷)-Infinity(负无穷)
isFinite()函数可以确定一个数值是否超过了规定范围,没有超过返回true,超过返回false
NaN即Not a Number,用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不回抛出错误)。NaN与任何值都不相等,包括它自身。
判别一个字面量x是否为NaN有两种方式:x != x 或者 isNaN(x) 。注意,isNaN(true)会返回false,因为true会被转换为数字1。
非数值转化为数值:Number()parseInt()parseFloat()

String

用于表示由零或多个16位Unicode字符组成的字符串。

Boolean

有两个值:truefalse。而true不一定等于1,false不一定等于0.由于JavaScript区分大小写,所以TRUEFALSE或其他不是Boolean类型的值。
其他类型转换成Boolean类型规则:

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 空字符串
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined undefined

NULL

只有一个值null。表示一个空对象引用(指针)。使用typeof操作符检测null会返回object

Undefined

只有一个值undefined。在使用var声明变量但没有对其初始化时,这个变量的值就是undefined
对于未初始化的变量与未声明的变量,使用typeof操作符时都是返回undefined。从逻辑上而言,前者的值是undefined,而后者是ReferenceError(引用错误)

引用类型

Object

创建Object实例的方式:

  1. new Obiect() 用new操作符后跟Object构造函数
  2. {} 使用对象字面量表示法

访问属性的方式:

  1. .点表示法
  2. []方括号表示法

Array

Date

使用UTC(Coordinated Universal Time,国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期。

1
2
3
var now = new Date(); // 自动获得当前日期和时间
var time = Date.now();// 返回表示调用这个方法时的日期和时间的毫秒数,应用:计时器?
console.log(Date.now() + ' || ' + now.getTime()); // 两个结果是一样的

RegExp

1
var expression = /pattern/flags;

pattern:可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、先前查找以及反向引用。每个正则表达式都可带有一或多个标志(flags),用以标明正则表达式的行为。
flags:有以下3个标志

  • g:全局模式,即模式被应用于所有字符串,而非在第一个匹配项时立即停止。
  • i:表示不区分大小写。
  • m:多行模式。即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。

Function

两种定义方式:

  1. function foo() {}
  2. var foo = function () {};

两者的区别:在调用函数时第一种方式可写在调用语句之后,而第二种方式必须写在调用之前。
函数内部属性:

  • arguments:保存函数参数
    arguments有一个callee属性,指向拥有这个arguments对象的函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 下面两种方式均为递归且等价,但第二种更优,降低耦合度
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * factorial(nume-1);
}
}
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(nume-1);
}
}
  • this:函数执行的环境对象

函数属性和方法:

  • length:表示函数希望接收的命名参数的个数
  • prototype:指向一个对象,这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法
  • caller:保存调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null
  • apply:在特定的作用域调用函数,实际上等于设置函数体内this对象的值。该方法接收两个参数:一个使在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是array的实例,也可以是arguments对象
  • call:在特定的作用域调用函数,实际上等于设置函数体内this对象的值。该方法第一个参数与apply方法一致,其余参数必须逐个列举出来
  • bind:创建一个函数实例,其this值会绑定到传给bind()函数的值

原始值是 不可更改 的;原始值得比较是 的比较。
对象值是 可修改 的;对象的比较是 引用 的比较。

typeof操作符:用来检测变量的数据类型

关于类型的几点规则:

  • 不要使用new Number()new Boolean()new String()创建包装对象;
  • parseInt()parseFloat()来转换任意类型到number
  • String()来转换任意类型到string,或直接调用某个对象的toString()方法;
  • typeof操作符可以判断出numberbooleanstringfunctionundefined
  • 判断Array要使用Array.isArray(arr)
  • 判断null要使用variable === null
  • 判断某个全局变量是否存在用typeof window.variable === 'undefined'
  • 函数内部判断某个变量是否存在用typeof variable ==='undefined'
文章目录
  1. 1. 基本语法
  2. 2. 数据类型
    1. 2.1. 原始类型(primitive type)
      1. 2.1.1. Number
      2. 2.1.2. String
      3. 2.1.3. Boolean
      4. 2.1.4. NULL
      5. 2.1.5. Undefined
    2. 2.2. 引用类型
      1. 2.2.1. Object
      2. 2.2.2. Array
      3. 2.2.3. Date
      4. 2.2.4. RegExp
      5. 2.2.5. Function
|