1 语法
1、区分大小写
在Javascript中的一切都是区分大小写的,即变量名test 和变量名Test分别表示两个不同的变量
2、标识符
标识符指变量、函数、属性的名字、或者函数的参数
标识符可按照以下格式规则组合起来的一个或者多个字符
① 第一个字符必须是一个字母、下划线或者一个$符号
② 其他字符可以使字母,下划线,美元符号或者数字
按照惯例,标识符会采用驼峰大小写格式,即第一个字母小写,剩下的每个单词的首字母大写,如: fisrtSecond myCar
3、注释
Javascript包含单行注释和块级注释。单行注释以两个斜杠开头,多行注释以一个斜杠和一个星号开头,以一个星号和一个斜杠结尾,如下
// 单行注释
/*********************
* 这是一个多行(块级)注释
*
*******************/
4、严格模式
ECMAScript 5引入了严格模式,严格模式定义了一种不同的解析和执行模型。在严格模式下,一些不确定的行为会被处理,不安全的操作也会抛出异常。要在脚本中启用严格模式,在脚本顶部添加代码 "use strict",它是一个编译指示,告诉支持的Javascript引擎切换到严格模式。
支持严格模式的浏览器包含 IE10+, FireFox 4+, Safari 5.1+,Opera 12 +, Chrome
5、语句
每个语句是以一个分号 (;) 结尾,如果省略分号,解析器自动确定语句的结尾。但不建议省略它,
多条语句是可以合到一个代码块中的,代码块是以 { 开头,以 } 结束。
if (con) {
alert('test')
}
2 保留字&关键字
一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始和结束,或者用于执行特定的操作,按照规则,关键字是语言保留的,不能用作标识符。
还有一组是保留字,也不能用作标识符,保留字在这门语言中还没有特定的用途,但是他们有可能将来被用作关键字
最好不要使用关键字和保留字作为标识符和属性名
3 变量
Javascript的变量是松散型的,是可以用来保存任何类型的数据。即每个变量是用于保存值的占位符而已。定义变量要使用 var 操作符,后跟变量名
var name
这行代码定义了一个名为name的变量,该变量可以用来保存任何值,像这样未经过初始化的变量,会保存一个特殊的值 undefined。
也可以直接初始化变量,在定义变量的同时就可以设置变量的值
需注意的是: 用var操作符 定义的变量将成为定义该变量的作用域中的局部变量,也就是说如果在函数中使用var定义了一个变量,在函数退出后,这个变量就会被销毁
function myFun() {
var name = 'jane';
}
myFun()
上面代码中的name变量就是局部变量,在函数被调用之后,变量name就会被销毁,那如果省略掉 var, 就会创建了一个全局变量。
①虽然var省略之后可以创建全局变量,并不推荐这种做法,这样会造成不必要的混乱,给未声明的变量赋值,在严格模式下,会导致抛出ReferenceError错误。
②可以使用一条语句定义多个变量,只要把每个变量用逗号分隔开就可以了。
③在严格模式下,不能定义名为eval和arguments的变量,会导致语法错误。
数据类型
JavaScript中有五种简单的数据类型,undefined, null, Boolean,Number和String。还有一种复杂的数据类型Object, 是由一组无序的名值对组成的。且JavaScript不支持任何创建自定义类型的机制。
1、typeof 操作符
JavaScript是松散类型的,因此需要一种手段来检测给定变量的数据类型,typeof就是这样的操作符, typeof(vars); typeof操作符可能的返回值有
① undefined : 当前值未定义
② boolean : 当前值是布尔值
③ string : 当前值是字符串
④ number : 当前值是数值
⑤ object : 当前值是对象或者null
⑥ function : 当前值是个函数
typeof 是操作符不是函数。
2、undefined 类型
undefined类型只有一个值 undefined, 在使用var声明变量但未初始化时,这个变量的值就是undefined。
var message
alert(message)
alert(age)
第一个警告框弹出 undefined,
第二个警告框是未声明的变量,则导致一个错误。对于未声明过得变量,只能执行一项操作,使用typeof操作符检测数据类型。
对于未初始化和未声明的变量执行typeof操作符都返回了undefined值。
3、Null类型
Null类型同样只有一个值的数据类型,就null
null值表示一个空对象指针,使用typeof操作符检测null值是会返回‘object’
undefined值是派生自null值的,位于null和undefined之间的相等操作符==总会返回true,不过这个操作符出于比较的目的会转换其操作数。
尽管如此,但是两者用途完全不同。在意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。
4、Boolean类型
Boolean类型有两个字面值 true 和 false。这两个值跟数字值不是一回事,因此true不一定等于1, false也不一定等于0.
这两个值是区分大小写的,即True和False都不是Boolean类型,只是标识符。
在Javascript中所有类型的值都有与这两个值等价的值。
各种数据类型以及对应的转换规则
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""空字符串 |
Number | 任何非零数值(包含无穷大) | 0 和 NaN |
Object | 任何对象 | null |
Undefined | -- | undefined |
5、Number类型
Number类型是用来表示整数和浮点数,最基本的数值字面量格式是十进制整数,整数还可以通过八进制或者十六进制的字面值来表示。其中,八进制字面量的第一位必须是0, 然后是八进制数字序列。八进制字面量在严格模式下是无效的,会导致支持该模式的Javascript引擎抛出错误。
十六进制字面量的前两位必须是0x,后跟任何十六进制数字(0-9或A~F),字母也可以是小写的。
在进行算术计算时,所有八进制和十六进制表示的数值都将被转换为十进制数值。
- 浮点数值
浮点数值,就是数值中必须包含一个小数点,并且小数点后边必须至少有一位数字。虽然小数点前可以没有整数,但是我们不建议这么写。
由于浮点数值的内存空间是保存整数值的两倍,因此Javascript会不失时机的将浮点数转换成整数值。浮点数的几个例子如下
var floatNum1 = 1.1
var floatNum2 = 0.1
var floatNum3 = .1
var floatNum4 = 1. //小数点后没有数字,解析为整数1
var floatNum5 = 1.0 //解析为整数1
对于极大或者极小的数值,可以用e表示法表示浮点数值。e表示法等于额e前面的数值乘以10的指数次幂
var floatNum = 3.125e7 //等于 3.125 * 10的7次方 31250000
浮点数的最高精度是17位小数,但是进行算术计算时其精确度远远不如整数。例如0.1 加 0.2 的结果不是0.3 ,是0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。
不要测试某个特定的浮点数值
- 数值范围
Number类型的最小数值保存在Number.MIN_VALUE, 值是5e-324
Number类型的最大数值保存在Number.MAX_VALUE, 值为1.7976931348623157e+308
如果计算结果超出了数值范围的值,那么这个数值自动转换成特殊的Infinity值。如果这个数值是负的,为-Infinity(负无穷大)。Infinity是不能参与计算的。想要确认一个数值是不是有穷的,可以使用isFinite()函数。 - NaN
NaN( Not a Number) , 即非数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。任何数值除以非数值都会导致错误,从而停止代码执行。
NaN的两个特点,
1、任何涉及NaN的操作,都会返回NaN
2、NaN与任何值都不相等,包含NaN本身。
Javascript定义了isNaN()函数。接受一个参数,该参数可以是任何类型。isNaN()接受一个值后,会尝试将这个值转换为数值,任何不能被转换为数值的值都会导致这个函数返回true。
4.数值转换
有3个函数,可以把非数值转换为数值:Number()、parseInt()、parseFloat()。Number()可以用于任何数据类型;另外两个函数则专门用于吧字符串转换成数值。
Number() 函数的转换规则
①如果是Boolean类型,true和false将分别转换为 1 和 0
②如果是数字值,只是简单的传入和返回
③如果是null值,返回 0
④如果是undefined, 返回 NaN
⑤如果是对象,则调用对象的valueOf()方法。然后依照 其他规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法。然后在依照其他规则返回字符串值。
⑥如果是字符串,则有一下规则a. 如果字符串只包含数值,则转换为十进制数值
b. 如果字符串包含有效的浮点格式,则转换为对应的浮点数值。
c. 如果字符串包含有效的 十六进制格式,转换为相同大小的十进制整数
d. 如果字符串是空的,则返回 0
e. 如果字符串包含除上述格式之外的字符,转换为 NaN
由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。parseInt()函数在转换字符串时,会忽略字符串前边的空格,直到找到第一个非空字符。
① 如果第一个字符不是数值或者负号,返回 NaN,即空字符串会返回 NaN
② 如果第一个字符是数字字符,会继续解析第二个字符,直到解析完后续字符或者遇到一个非数字字符。
parseInt()函数提供了第二个参数,转换时使用的基数。
var num1 = parseInt('0xaf', 16) //175
var num2 = parseInt('AF') // NaN
parseFloat()值解析十进制值,故解析十六进制的字符串会转换为0。如果字符串包含的是一个可解析为整数的书,则会返回整数。
var float1 = parseFloat('1234blue') //1234
var float2 = parseFloat('oxf') // 0
var float3 = parseFloat('22.34.2') // 22.34
var float4 = parseFloat('0980.98') // 980.98
6. String类型
String类型用于表示由0或多个16位Unicode字符组成的字符序列,可以由双引号或者单引号表示,以双引号开头的字符串必须以双引号结尾,以单引号开头的也必须以单引号结尾
- 字符字面量
String数据类型包含一些特殊的字符字面量,即转义序列,用于表示非打印字符。
\n----------------------换行
\t-----------------------制表
\b----------------------退格
\r-----------------------回车
\f-----------------------进纸
\------------------------斜杠
'------------------------单引号
"------------------------双引号
\xnn-------------------十六进制数
\unnnn----------------Unicode字符
这些字符字面量都可以出现在字符串的任意位置,被座位一个字符来解析 - 字符串特点
字符串是不可变的,也就是说,字符串一旦被创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量, - 转换为字符串
要把一个值转换为一个字符串,有两种方式,
① toString() 方法,返回相应值的字符创表现
var age = 11;
age.toString(); // "11"
var found = true;
found.toString(); // "true"
数值,布尔值,对象和字符串值都有toString() 方法,但 null 和 undefined 值没有这个方法
在调用数值的toString() 方法时, 可以传递一个参数,输出数值的基数,默认情况下是以十进制格式返回数值的字符串表现。
② String()转型函数
在不知道要转换的值是不是null或者undefined的情况下,可以使用转型函数 String(), 这个函数能够将任意类型的值转换为字符串
String()函数遵循的转换规则:
- 如果值有 toString() 方法,则调用该方法并返回结果
- 如果值是 null 则返回 " null"
- 如果值是 undefined, 则返回 "undefined"
如果要把某个值转换为字符串,可以使用加号操作符,把它与另外一个字符串""加在一起
7. Object类型
Javascript的对象就是一组数据和功能的集合,对象可以通过执行new操作符后跟要创建的对象类型的名称创建。
var o = new Object()
如果不给构造函数传递参数,就可以省略后面的那一对圆括号。
在javascript中,Object类型是所有它的实例的基础。
Object类型的每个实例都具有下面的属性和方法
constructor: 保存用于创建当前对象的函数
hasOwnProperty(‘name’):用于检查给定的属性在当前对象实例中是否存在。
isPrototypeof(object): 检查传入的对象是否是当前对象的原型
propertyIsEnumerable(propertyname): 检查给定的属性是否能够使用for-in语句来枚举
toLacaleString() : 返回对象的字符串表示
toString(): 返回对象的字符串表示
valueOf(): 返回对象的字符串,数值或者布尔值表示。