声明:本人的所有博客皆为个人笔记,作为个人知识索引使用,因此在叙述上存在逻辑不通顺、跨度大等问题,希望理解。分享出来仅供大家学习翻阅,若有错误希望指出,感谢!
基本概念
JavaScript区分大小写
标识符采用驼峰写法
不能将关键字用作标识符
注释
单行注释://xxxxxxxxxx
多行注释:/* xxxxxxxxxxx */
严格模式
在整个脚本启用严格模式:在顶部添加 “use strict”;
在函数中启用严格模式:在函数体第一行添加 “use strict”;
语句
JavaScript语句以 ; 作为结尾,可以省略但建议永远不要省略
使用 { } 表示代码块,建议能写代码块的地方都写代码块
变量
定义变量的语法
var 变量名1,变量名1,……; var 变量名=XXX,变量名=XXX,……;
-
JavaScript变量使松散型,可以保存任何类型数据
-
每个变量仅仅是一个数据的占位符而已
-
未经初始化的变量会保存一个特别的值:undefined
-
可以在修改变量值的同时修改变量类型
-
用var定义的变量为局部变量,这个变量在函数退出后会被销毁
-
省略var可以定义全局变量,但不建议在局部作用域中定义全局变量
-
严格模式下不能定义名为eval或arguments变量,否则会导致语法错误
数据类型
Undefined
- 使用var声明变量但未对其初始化时,该变量的值是Undefined,建议显式的初始化变量
Null
- 表示一个空对象指针,typeof操作符检测null会返回object
- 如果定义的变量准备在将来保存对象,那最好将其赋值为null
- 位于null与undefined之间的 == 总会返回true
Boolean
- 只有true和false两个值,true不一定等于1,false不一定等于0
- true和false区分大小写
- 可以调用Boolean() 方法将一个值转化为Boolean,空值or空字符串转为false,其他情况为true
Number
- 八进制第一位必须为0,若后面的数字超过了7,则会被解释为十进制,开头的0会被无视
- 八进制在严格模式下无效
- 十六进制开头必须是0x
- JavaScript中可以保存+0和-0,二者相等
- 浮点数必须有小数点,若小数点后没有数字,则会被解释为整型
- AeB:科学计数法,AeB=A*10^B
- 数值范围:超出JavaScript表示范围的值会被记录为Infinity,表示无穷,有正负之分,Infinity变量无法参与运算
- NaN:
- NaN表示非数值,是一个特殊数值,常用于函数返回值,用于表示函数返回错误
- 任何涉及NaN的操作都会返回NaN
- NaN与任何值不相等,包括NaN自身
- isNaN()函数用于确定变量是否为NaN
- 数值转换
- Number( anyData ):将任意数据转换为数值
- 布尔型转 0 or 1
- null转0
- undefined转NaN
- 字符串:
- 只包含数字的字符串转对应数值(十进制)
- 空字符串转0
- 其他字符串转NaN
- parseInt( String , 进制数 ):将字符串转化为整型,进制数可以不写,但建议在任何情况下都写进制数
- parseFloat( String ):将字符串转化为浮点型,只解析十进制
- Number( anyData ):将任意数据转换为数值
String
- 可以由 " " 或 ’ ’ 表示,意义完全相同
- 可以通过 字符串.length 获取字符串长度,但如果字符串中包含双字节字符,则length属性可能不会精确返回字符数
- 字符串不可变,修改字符串需销毁原有字符串,再建立一个新的字符串对象赋给原变量
- 转化为字符串:
- toString()方法,在调用数值的toString()方法时可以传入一个进制数,null和undefined没有toString()方法
- 使用 非字符串+"" 将非字符串转化为字符串
Object
是所有引用类型的父类
var 变量名 = new Object();
- Object类方法:
方法 | 简介 |
---|---|
hasOwnProperty( propertyName ) | 用于检查给定的属性是否在当前对象实例中 |
isPropertyOf( Object ) | 用于检查传入的对象是否是当前对象的原型 |
propertyIsEnumerable( propertyName ) | 用于检查给定的属性能否使用for-in语句来枚举 |
toLocaleString( ) | 返回对象的字符串表示,该字符串与执行环境的地区对应 |
toString( ) | 返回对象的字符串表示 |
valueOf( ) | 返回对象的字符串、数值、或布尔值表示 |
typeof操作符
typeof 变量名or具体值; //返回数据类型名
操作符
一元操作符
递增、递减运算符
- ++n n++ --n n–
- 与c语言相同
一元加减操作符
- 对数值使用:表示正负
- 对非数值使用:自动调用Number()函数进行转型,并添加正负
布尔操作符
-
逻辑非
先将操作数转化为一个布尔值,再取反
-
逻辑与(&&)
操作数1 操作数2 返回值 对象 操作数2 求值为true 对象 操作数2 对象 对象 操作数2 null null NaN NaN undefined undefined -
逻辑或(||)
操作数1 操作数2 返回值 对象 操作数1 求值为false 操作数2 对象 对象 操作数1 NaN NaN NaN null null null undefined undefined undefined
二元操作符
乘性操作符
包括乘法、除法、取模
- 与C语言基本相同
- 若操作数不是数值,会先调用Number()
加性操作符
1.加法
- 若两个操作数都是数值,则按常规加法计算(包括无穷Infinity)
- 有关Infinity的计算,若在数学上求不出,则结果为NaN
- 若操作数有字符串,则执行字符串拼接操作,将不是字符串的操作数转为字符串( toString() )
2.减法
与加法类似
关系操作符
> < >= <=
操作数1 | 操作数2 | 处理方式 |
---|---|---|
数值 | 数值 | 数值比较 |
字符串 | 字符串 | 字符编码值比较 |
数值 | 将操作数2转为数值,进行数值比较 | |
对象 | 调用对象的valueOf()或toString(),再按照以上规则比较 | |
布尔值 | 将布尔值转化为数值,进行数值比较 |
相等操作符
相等、不相等:先转换再比较
操作数1 | 操作数2 | 处理方式 |
---|---|---|
布尔值 | 先转为01再比较 | |
字符串 | 数值 | 先将字符串转为数值再比较 |
对象 | 非对象 | 先调用对象的valueOf() |
对象 | 对象 | 比较两对象是否为同一个对象 |
null | undefined | 相等 |
NaN | 不相等 |
全等、不全等:只比较不转换
全等:===
不全等:!==
条件操作符
A ? B : C //若A求值为true,则返回B,否则返回C
语句
if、do-while、while、for、switch语句
与C语言基本一致
这些语句的条件表达式可以不返回布尔值,会自动调用Boolean()方法
建议始终使用代码块 { } ,即使代码块里只有一行代码
for-in语句
语法:
for( var 变量名 in 遍历对象 ){}
- 类似于java中的for(类型名 item:遍历对象)
- 在使用for-in之前,建议先检查遍历对象是否是null或undefined
label语句
使用label语句在代码中添加标签
标签名:语句
- 一般与循环语句配合使用
- 使用 break 标签名; or continue 标签名; 返回代码中的特定位置(标签声明处),可以使break与continue语句一次性跳出多重循环
- label标签尽量少用
with语句
with(对象){
代码……;
}
将代码的作用域设置到一个特定对象中
如:with语句中的代码可以直接使用特定对象的方法而不用加"对象." 前缀
- 大量使用with会降低性能
函数
function 函数名(arg0,arg1,……){
函数体
}
特点:
- 对返回值没有要求
- 建议要么不返回值,要么始终返回一个值,不要有时候返回,有时候不返回,难以维护
- 严格模式下
- 不能使用eval或arguments作函数名或参数名
- 不能出现两个参数同名
- JavaScript函数使用数组来接受参数,故长度不限,类型不限,参数的命名仅提供便利,不是必须的
- 即使函数定义了两个参数,也可以传入三个参数
- 使用预定义数组arguments[索引]来方位参数数组,索引从0开始,arguments.length获取参数个数
- 由于参数名和参数个数都没有实际意义,因此JavaScript的函数没有重载,但可以使用arguments.length获取参数个数,再根据参数个数做出不同处理,以实现伪重载
**另一种函数定义方式:**函数表达式
var 函数名 = function(参数列){
函数体;
}
使用 函数名() 来调用函数
定义立即执行函数:
var 变量名 = function(参数列){ //此处变量名接受函数的返回值,而不是函数对象
函数体;
}();
该函数由于没有名字,故只能用一次