第三章 基本概念
3.1 语法
3.1.1区分大小写
3.1.2标识符
指的是变量、函数、属性的名字,或者函数的参数
- 第一个字符必须是一个字母,下划线(_)或者一个美元符号($)
- 其他字符可以是字母、下划线、美元符号或者数字。
- 惯例,采用驼峰命名法
3.1.3注释
- 单行
//单行只是
2.多行
/*
*多行
*注释
*/
3.1.4 严格模式
ECMAScript 5 引入
3.1.5语句
3.2关键字和保留字
关键字:
break do instanceof typeof case else new var catch finally
return void continue for switch while debugger function this
with default if throw deleted in try
保留字:
3.3变量
ECMAScript的变量是松散类型的,也就是说变量可以保存任何类型的数据。
3.4数据类型
六种基本数据类型:Undefined、Null、Boolean、NUmber、String + Symbol(字符、ES6新增) 还有一种复杂数据类型:Object
3.4.1 typeof操作符
用来检测给定变量的数据类型,可能返回下列某个字符串
- “undefined” ---- 这个值未定义
- “boolean” ---- 布尔类型
- “string” ---- 字符串
- “number” ---- 数值
- “object” ---- 对象或者null
- “function” ---- 函数
3.4.2 undefined 类型
对于未经声明的变量,只能进行typeof
操作来检测其数据类型(数据类型为undefined),其他操作会报错!
3.4.3 Null 类型
从逻辑学的角度,null值表示一个空对象指针
var car = null;
alert(typeof car); //"object"
如果定义的变量准备用来保存对象, 那么最好将该变量的值初始化为null,而不是其他值.
实际上undefined值是派生自null值的.
3.4.4 Boolean 类型
只有两个值: true 和 false ,要将一个值转换为对应的 Boolean值,可以调用转型函数 Boolean()
返回false的值有:
- 0
- NaN
- ''或 "" (空字符串)
- null
- undefined
- false
3.4.5 Number 类型
- 八进制字面值的第一位必须是0,然后是八进制数字序列(0~7),然后超出,前面的0省略,后面会当做十进制值解析.
- 十六进制前面是0x,后面是(0~9或者A~F)
- 计算时会转为十进制再计算.
一,浮点数值
浮点数值需要的内存空间是整数的两倍,会将一些浮点数值转换为整数值. 对于极大或者极小的数值,可以使用e表示法(科学计数法)
var floatNum = 3.125e7 //3.125 * 10^7 = 31250000
var floatNum = 3e-7 // 3*10^(-7) = 0.0000003
默认情况下,ECMAScript会将那些小数点后带有6个0以上的浮点数用e表示法表示.
注意: 浮点数值的最高精度是17位小数,浮点数值计算会产生舍入误差问题,这是使用基于IEEE754数值的浮点计算的通病
二,数值范围
内存限制,ECMAScript能够表示的最小数值保存在Number.MIN_VALUE
中--大多数浏览器中,这个值是5e-324;最大值保存在 Number.MAX_VALUE
--在大多浏览器中这个值是1.7976931248623157e+308; 如果一个值超过这个范围,就会被转换为一个特殊的值 Infinity
或者-Infinity
三, NaN 非数值 ( Not a Number) 用来表示一个本来要返回数值的操作数未返回数值的情况. 任何涉及NaN的操作,返回值都是NaN.
有一个isNaN()
函数
四, 数值转换
三个函数可以把非数值转为数值:Number() / parseInt() / parseFloat()
-
Number()
-
parseInt() 常用 最好指定为十位数
parseInt('88',10)
//值为 88 -
parseInt() 字符串的第一小数点是有效的,第二个以后就是无效的.
3.4.6 String类型
String类型表示由零个或多个16位Unicode字符搜组成的字符序列.即字符串.
- 字符字面量
- 字符串的特点: 不可变,"改变"的过程其实是销毁和再创建.
- 转换为字符串
toString()
3.4.7 Object() 类型
对象其实就是一组数据和功能的集合.
var o = new Object()
Object 类型所具有的任何属性和方法也同样存在于更具体的对象中.
3.5 操作符
3.5.1 一元操作符
- 递增和递减操作符
++ --
- 一元加和减操作符
+ -
3.5.2 位操作符
很少用
3.5.3 布尔操作符
- 逻辑非
!
- 逻辑与
&&
- 逻辑非
||
3.5.4 乘性操作符
- 乘法
*
- 除法
/
- 求模(余数)
%
3.5.5 加性操作符
- 加法
+
- 减法
-
3.5.6 关系操作符
<
>
<=
>=
3.5.7 相等操作符
== 和 != 先转换操作数,再比较.
=== 和 !== 不转换直接比较
3.5.8 条件操作符
条件?对执行 :错执行
3.5.9 赋值操作符 =
乘/赋值(*=)
除/赋值(/=)
模/赋值(%=)
加/赋值(+=)
减/赋值(-=)
左移/赋值(<<=)
有符号右移/赋值(>>=)
无符号右移/赋值(>>>=)
3.5.10 逗号操作符
逗号操作符多用于声明多个变量,或者用于赋值(用来赋值时返回最后一项,基本不这样用)
3.6 语句
3.6.1 if 语句
常用,没什么难的
3.6.2 do-while 语句
是一种后测试循环语句,至少会被执行一次
3.6.3 while 语句
前测试循环语句
3.6.4 for语句
前测试循环语句,常用于数组/对象的遍历
3.6.5 for-in 语句
是一种精准的迭代语句,可以用来枚举对象的属性 注意: 对象的属性没有顺利,通过for-in循环输出的属性名的顺序是不可预测的,可能因浏览器而异.
3.6.6 label 语句
3.6.7 break 和 continue 语句
3.6.7 with 语句
3.6.8 switch 语句
多个条件嵌套时使用.
switch (expression){
case value: statement
break;
case value: statement
break;
case value: statement
break;
case value: statement
break;
default: statement
}
需要混合几种情形,要添加注释
switch(i){
case 25:
/*合并两种情景*/
case 35:
alert("25" or "35")
break;
case 45:
alert("45")
break;
default:
alert("other")
}
3.7 函数
通过函数可以封装任意多条语句,而且可以在任何地方任何时候调用执行.
可通过 return
返回值,return
后的语句不会执行.
3.7.1 理解参数
不介意传递进来多少个参数,也不介意参数是什么数据类型.
原因是:ECMAScript中的参数在内部是用一个数组来表示的.
在函数体内部,可以通过arguments
对象来访问这个参数,使用方括号语法
arguments[0]
arguments[1]
arguments[2]
arguments[3]