javascript基本概念
一,语法
1,区分大小写
2,标识符
1)第一个字符必须是字母,下划线_,或美元符号$
2)其他字母可是字母,下划线,美元符号,或数字
3,注释
1)//单行注释
2)/*
*/多行注释
4,严格模式
use
strict
5,语句
1)使用分号结尾最好,但不是必须的
2)代码块不用分号结尾
二,关键字和保留字
三,变量
1)松散类型
2)var声明的变量为局部变量,省略var则成为了全局变量
四,数据类型
5种基本数据类型:undefined,null,boolean,number,一种object复杂类型
1,typeof操作符
1)如果这个值未定义 undefined
2)如果是布尔值 boolean
3)如果是字符串 string
4)如果是数值 number
5)如果是对象或者null
object
6)如果是函数 function
返回的是字符串
2,undefined类型
只有一种情况,只有一个值,就是使用var声明后但未进行初始化的
1)使用未声明的变量有错误的,对未声明的变量执行typeod返回undefined
2)未初始化的变量,执行typeof返回undefined
3,null类型
1)只有一个值,逻辑上讲,表示一个空对象指针
2)使用typeof检测会返回object
3)位于null和undefined之间的相等操作符会返回true
4,boolean类型
1)只有两个字面值true和false
2)true不等于1,false不等于0
3)转型函数Boolean()
可以将一个值转换成对应的Boolean值
4)string类型 任何非空字符串
返回true
""空字符串 返回false
number类型 任何非零数值 返回true
0 和
NaN 返回false
object类型 任何对象
返回true
null
返回false
undefined /
undefined 返回false
5,number类型
1)浮点数值需要的内存空间是整数的两倍,最高精度17位,
2)不能用
==
比较浮点数,
3) 最小数值保存在Number.MIN_VALUE
最大数值保存在Number.MAX_VALUE
无穷数保存在Infinity中,不能参与计算
isFinite()函数 位于无穷之间的数返回true
4) NaN 非数值,表示本来要返回数值的操作数未返回数值的情况
任何涉及NaN的操作都返回NaN,NaN与任何数值都不相等包括NaN本身
NaN()
任何不能被转换成数值的值都会返回true
5) 三个把非数值转换成数值的函数
Number() 规则如下
true返回1,false返回0
数字只做简单的传人传出
null返回0
undefined
返回NaN
字符串
只含数字,直接返回十进制数值
字符串包含浮点数,返回对应的浮点数值忽略前导0
字符串含有16进制,返回对应的十进制数值
字符串是空
返回0
其余字符串 返回NaN
对象
先调用valueof()方法,按上述转换,若返回NaN,调用tostring ()方法,在按上述转换
parseInt()
忽略字符串前面的空格,如果第一个字符不是数字或者负号返回NaN 转换空字符 返回NaN 返回整数 以0开头的数字按八进制转换
返回整数
可以指定第二个参数,按第二个参数转换成相应进制的整数
parseFloat()
与parseInt大体相似,不过返回为浮点数,即第一个小数点为有效的
只解析十进制数值
,也可以返回整数
6,string类型
1) 字符字面量(转义字符)
\n换行 \t制表 \b空格 \r回车 \f进纸
\\斜杠 \‘单引号 \‘‘双引号
\xnn 以十六进制nn表示一个字符 \unnnn 十六进制nnnn表示unicode字符
2)
字符串的特点
字符串一旦创建,其值是不可改变的,要想改变前需先销毁原字符串
3)toString() 方法
数值,布尔值,对象和字符串都有此方法,null和undefined没有
4)string()方法
如果有toString() ,调用该方法
如果值是null undefined 返回
‘null‘,‘undefined‘
7,object类型
1)通过new操作符来创建对象,var o = new
Object()
2)object的实例都具有下列属性和方法
constructor:保存用于创建当前对象的函数
hasOwnProperOf(propertyname):用于检验给定的属性是否属于当前的对象
实例中,而不是实例的原型中,参数的属性名必须以字符串形式指定
isPrototypeOf(object):用于检验给定的对象是否是传入对象的原型
proertyIsEnumerable(propertyName):用于检测给定的属性名能否用
for-in枚举,参数的属性名必须以字符串形式给定
toLocaleString():返回对象的字符串表示,字符串与执行环境的地区对应
string():返回对象的字符串表示
valueOf():返回对象的字符串,数值,布尔值表示
五,操作符
1,一元操作符
1)递增递减,前置:先对其执行自增自减后使用,后置:先使用后对其自增自减
对字符串,布尔值,浮点数值,对象,NaN都可以使用
2)一元加和一元减,一元减表示取负
2,位操作符
二进制补码,先求绝对值的二进制码,求反,加1
处理有符号的整数时,不能访问第31位
1)按位非
~
返回数值的反码
2)按位与 &
两个操作数的二进制,进行与运算,只有两个为1返回1
3)按位或
|
两个操作数的二进制,进行或运算,只有两个为0返回0
4)按位异或 ^
两个操作数的二进制,进行异或运算,两个为1或0
返回1
5)左移 <<
将操作数的二进制的所有位左移,不会影响操作数符号
6)有符号右移
>>
将操作数的二进制的所有位右移,以符号位的值填充空位
7)无符号右移
>>>
对正数来说同有符号的右移
对负号来说,右移以0填充空位,负数的二进制(补码)以正数的二进制处理
3,布尔操作符
1)逻辑非 !
对象 返回false
空字符串
返回true
非空字符串 返回false
0 返回true
非0数值 返回false
null
返回true
NaN 返回true
undefined 返回true
2)逻辑与
&&
在一个操作数不是布尔值的情况下,逻辑与操作不一定返回布尔值
第一个操作数是对象,返回第二个操作数
如果第二个是对象,则在第一个操作数为真的情况下返回第二个对象
两个操作数都是对象,返回第二个操作数
如果一个操作数是null,undefined,NaN,返回null,undefined,NaN
存在短路,第一个操作数为假,则不判断第二个操作数
3)逻辑或
||
在一个操作数不是布尔值的情况下,逻辑或的操作不一定会返回布尔值
如果第一个操作数是对象,返回第一个操作数
如果第一个操作数返回false,返回第二个操作数
如果两个都是对象,返回第一个操作数
如果两个操作数都是null,undefined,NaN,返回null,undefined,NaN
存在短路,第一个操作数为真,不判断第二个操作数
4,乘性操作符
1)*
如果操作数都是数值,执行常规乘法,同号为正,异号为负,超范围为
Infinity和-Infinity
如果一个操作数是NaN,结果为NaN
Infinity
* 0 ,返回NaN
Infinity * 非零,返回Infinity或-Infinity
Infinity *
Infinity相乘,返回Infinity
如果一个操作数不是数值,调用number()函数后执行
2)/
如果操作数都是数值,执行常规除法,同号为正,异号为负,超范围为
Infinity和-Infinity
如果一个操作数是NaN,结果为NaN
如果0/0
返回NaN
如果是Infinity/Infinity
结果NaN
非零的有限数/0,返回Infinity或-Infinity
Infinity/任何非零数值,结果是infinity或-Infinity
如果有一个操作数不是数值,调用number()方法后操作
3)%
(求模)
如果操作数都是数值,执行常规除法计算,返回余数
无穷大%有限大 结果NaN
有限大%0
结果NaN
Infinity % Infinity 结果NaN
有限大 % 无穷大 结果是被除数
0 % 任意数
结果是0
如果有一个数不是数值,调用number()方法后操作
5,加性操作符
1)加法
如果一个操作数是 NaN
结果是NaN
Infinity + Infinity 结果是Infinity
-Infinity + (-Infinity)
结果是-Infinity
-Infinity + infinity 结果是NaN
+0 + +0 结果是+0
-0 + -0
结果是-0
+0 + -0 结果是+0
如果两个操作数是字符串,做拼接
如果一个操作数是字符串,将另外一个也转换成字符串,然后做拼接
如果一个操作数是对象,数值,或布尔值,调用toString()方法,在做拼接
2)减法
如果两个操作数都是数值,执行常规减法
有一个操作数是NaN,结果为NaN
Infinity - Infinity
结果是NaN
-Infinity - -Infinity 结果是NaN
Infinity - -Infinity
结果是Infinity
-Infinity - Infinity 结果是-Infinity
+0 - +0 结果 +0
+0 -
-0 结果 -0
-0 - -0 结果是+0
如果有一个操作数是字符串,布尔值,null或undefined,调用number()函
数转换成数值,在按上述规则执行
如果一个操作数是对象,调用valueOf()方法,toString()方法获取值,
6,关系操作符
< > <= >=
1)如果两个数都是数值,执行数值比较
2)都是字符串,比较字符串的对应的字符编码值
3)一个操作数是数值,将另一个转换成数值,然后执行数值比较
4)一个操作数是对象,调用对象valueOf()方法,或toSring()方法,然后比较
5)一个操作数是布尔值,将其转换成数值,然后执行比较
7,相等操作符
1)相等和不相等(==
!=),先转换后比较
如果有一个操作数是布尔值,比较之前将其转换为数值,false-1,true-0
如果一个是数值,一个是字符串,先将字符串转换为数值
如果其中一个是对象,调用valueOf()方法,在按上述方法比较
null和undefined是相等的,不能将null和undefined转换成其他值
如果一个数NaN,则相等操作符返回false,不等操作符返回true
如果两个操作数都是对象,则是同一个对象返回true,否则false
2)全等和不全等(===
!==),不转换比较
null==undefined返回true null===undefined
返回false
8,条件操作符
variable = boolean_expression ?
true_value:false_value;
9,赋值操作符
=
,复合赋值操作符不会带来性能的提升
10,逗号操作符
用于声明多个变量,var num1= 1,num2=
2,num3=3;
于赋值,返回表达式最后一项 var num =
(5,4,3,12,);
六,语句
1,if语句
2,do-while语句
do{}while();至少会执行一次
3,while语句
while(){}
可能一次都不执行
4,for语句
for语句循环内部定义的变量,外部仍然可以使用
5,for-in语句
for(property
in express) statement
枚举对象的属性,属性返回的顺序不可预测
部分浏览器对象为null和undefined时
会产生错误
6,label语句
和break,continue使用,用于跳出循环
7,break和continue语句
break跳出整个循环
continue跳出本次循环,进行下一次循环
8,with语句
简化代码,不建议使用,会导致代码性能下降
9,switch语句
switch
(expression){
case
value:statement
break;
default:statement
}
case的值可以不是常量
在比较值时使用的是全等操作符,不执行类型转换
七,函数
函数return后面的语句永远不会执行,return语句不带返回值执行结束后返回undefined
1,理解参数
1)s函数不介意传进的参数是否与形参相同,会给传进的参数用数组表示
2)argument对象用来访问参数数组
3)argument.length
返回参数的个数
4)没有传递值的形参将被赋予undefined值
2,没有重载
两个名字相同的函数,该名字只属于后者