作者:汪娇娇
时间:2017年11月4日
指变量、函数、属性的名字,采用驼峰大小写格式。
单行://
多行:/* */
"use strict"
以一个分号结尾,代码块用{}包起来。
关键字有指定用途;
break | do | instanceof | typeof |
---|---|---|---|
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger* | function | this | with |
default | if | throw | |
delete | in | try |
保留字无特定用途,是关键字的备选。
abstract | enum | int | short |
---|---|---|---|
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
变量是松散类型,也就是可以用来保存任何类型的数据。
ECMAScript中有5种简单数据类型(Undefined、Null、Boolean、Number和String)和一种复杂数据类型(Object)。
未对变量初始化。
空对象指针。
用typeof检测null值时会返回“object”。
alert(null == undefiend); //true
虽然null和undefined有这样的关系,但无论什么情况下,都没必要把一个变量的值显示的设为undefined,但只要意在保存对象的变量还没有真正保存对象时,就应该明确的让变量保存null值。
虽然Boolean的字面量只有true和false这两个,但ECMAScript中所有类型的值都有与这两个值等价的值。
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包含无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; //有效,但不推荐
对于极大极小的值,可以用e表示法(即科学计数法)。
var floatNum1 = 3.125e7; //31250000
var floatNum2 = 0.0000003; //3e-7
浮点数值的最高精度是17位小数,但在进行算数计算时其精确度远远不如整数。例如0.1加0.2的结果不是0.3,而是0.30000000000004 。
原因:这是使用基于IEEE754数值的浮点计算的通病。
最小值:Number.MIN_VALUE,这个值是 5e-324;
最大值:Number.MAX_VALUE,这个值是1.7976931348623157e+308;
如果超出数值范围:-Infinity和Infinity。
NaN与任何数都不相等,包括NaN本身。
alert(NaN == NaN); //false
isNaN()函数:接受一个参数,用来帮我们确定这个参数是否“不是数值”。
Number()、parseInt()、parseFloat()。
注:
Number():如果字符串是空的,则将其转换为0;
parseInt():如果字符串是空的,则将其转换为NaN;能够识别出各种整数格式(十进制、八进制和十六进制),还可以接受第二个参数(转换时使用的基数,即多少进制);
parseFloat():只解析十进制,无第二个参数,十六进制的字符串始终被转换成0 。
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号 |
\" | 双引号 |
\xnn | 以十六进制代码nn表示的一个字符 |
\unnn | 以十六进制代码nnnn表示的一个Unicode字符 |
不可变
toString()、String()、与一个字符串("")加在一起
Object的实例都有下列属性和方法。
只能操作一个值的操作符叫一元操作符。
var num = 25;
num = +num; //25
num = -num; //-25
在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
32位:前31位表示整数的值,第32位表示数值的符号,0表示正数,1表示负数。这个表示符号的位叫符号位。
负数同样以二进制码存储,但使用的格式是二进制补码。
求补码步骤:求绝对值、反码、反码加1。
我们可以利用逻辑或的这一行为(如果第一个操作数的求值结果为true,就不会对第二个操作数求值了)避免为变量赋值null或undefined值。
var myObject = preferredObject || backupObject;
Infinity与0相乘,结果是NaN;
Infinity与非0数值相乘,结果是Infinity。
Infinity被Infinity除,结果是NaN;
0被0除,结果是NaN。
Infinity与-Infinity相加,结果是NaN;
+0与-0相加,结果是+0。
小于(<)、大于(>)、小于等于(<=)、大于等于(>=)。
大写字母的字符编码全部小于小写字母的字符编码。
null和undefined相等,但不全等。
var max = (num1 > num2) ? num1 : num2;
var num1 = 1, num2 = 2, num3 = 3; //声明多个变量
var num = (5, 1, 4, 8, 0); //num的值为0
(1)if语句:最佳实践是使用代码块
(2)do-while语句:后测试循环语句,循环体中的代码至少要被执行一次
(3)while语句:前测试循环语句
(4)for语句:前测试循环语句
(5)for-in语句:用来枚举对象的属性,属性没有顺序
(6)label语句
label: statement
start: for(var i=0, i < count, i++){
alert(i);
if( i == 5){
break start;
}
}
这个例子中定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。
(7)break和continue语句
break:会立即退出循环,强制继续执行循环后面的语句。
continue:立即退出循环,但退出循环后会立即从循环顶部继续执行。
(8)with语句:将代码的作用域设置到一个特定的对象中。
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
(9)switch语句:流控制语句。
switch语句在比较值时使用的是全等操作符。
ECMAScript中的参数在内部是用一个数组来表示的。在函数体内可以通过arguments对象来访问这个参数数组。
原因:没有函数签名
Javascript的核心语言特性在ECMA-262中是以名为EC ECMAScript中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制作出规定。理解 ECMAScript及其纷繁复杂的各种细节,是理解其在Web浏览器中的实现 — Javascript的关键。目前大多数实现所遵循的都是ECMA-262第3版,但很多3也已经着手开始实现第5版了。以下简要总结了 ECMAScript中基本的要素。
1、ECMAScript中的基本数据类型包括 Undefined、Null、Boolean、Number和 String。
2、与其他语言不同, ECMAScript没有为整数和浮点数值分别定义不同的数据类型,,Number类型可 用于表示所有数值。
3、ECMAScript中也有一种复杂的数据类型,即 Object类型,该类型是这门语言中所有对象的基础类型。
4、严格模式为这门语言中容易出错的地方施加了限制。
5、ECMAScript提供了很多与C及其他类C语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。
6、ECMAScript从其他语言中借鉴了很多流控制语句,例如if语句、for语句和 switch语句等。
ECMAScript中的函数与其他语言中的函数有诸多不同之处。
1、无须指定函数的返回值,因为任何 ECMAScript函数都可以在任何时候返回任何值。
2、实际上,未指定返回值的函数返回的是一个特殊的 undefined值。
3、ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式。
4、可以向 ECMAScript函数传递任意数量的参数,并且可以通过 arguments对象来访问这些参数。
5、由于不存在函数签名的特性,,ECMAScript函数不能重载。