ecma:欧洲计算机制造商协会
iso/iec:国际标准化和国际电工委员会
dom级别(10*)文档对象模型
1:DOM核心(映射基于xml文档)与dom html(在dom核心基础上)
2:对鼠标,事件,范围,遍历,还有对css样式表的支持
dom2:新接口...视图,事件(鼠标,移动),样式(css),遍历与范围(对文档树的操作)
3:对文档加载和保存,验证模块,对核心进行扩展,对xml.0规范
其他dom
svg可伸缩矢量图
mathml数学标记语言
mghi同步多媒体集成语言
ie5 dom1
mozilla 0.6.0 支持dom
firefox3完全支持dom1 dom2 dom3(部分)
bom(6*)浏览器对象模型
弹出新窗口
移动,绽放,关闭浏览器窗口
提供浏览器详细信息location对象
提供用户显示器分辨率screen对象
html中使用js方式
<script></script>在html内部使用
<script src=‘js.js‘></script>外部使用
属性:async:用于下载此脚本 ,只对外部js文件有效
charset:字符集(一般情况下,设置成utf-8即可)
defer延迟执行脚本,在ie7版本之前有效(对外部js文件有作用)
language:不在使用
type:脚本文件内容,js在服务器端时,使用的是mime:application/x-javasciprt
src:外部文件路径
alert(obj)打印obj字符串内容
console.log(obj)向控制台输出obj字符串内容
现在的web应用程序都将js文件放在body层里面使用,这样做的好处是:当js代码被下载时,它会和body
里面的内容同时显示出来,如果js文件存放在head里面时,它会被下载,解析,和执行完成之后,才呈
现body主体内容,这样会在中间出现延迟时间,会造成页面的部分空白.
h5规范了对脚本按照它们出现的先后顺序进行执行
ie4到ie7对defer这个属性是支持的,ie8之后,就完全按照h5规则来制定
ie4,firefox3.5 safari5 chrome都最先支持defer属性
xhtml要设置成defer=‘defer‘
async(异步脚本)与defer类似,但它不保证脚本的执行顺序
xhtml要设置成async=‘async‘
js基础
1:区分大小写
2:不能以数字开头,第一个字符必须以字母或下划线或者$开头,后面跟着字母或下划线或者$或者数字
,采用驼峰大小写方式(第一个字母小写,其余每个单词贩首字母大写)
3:不能使用关键字,如functinon ,class,if等
//单行注释
/* */多行注释
在js中基于对象
严格模式
‘use strict‘支持(ie10+,firefor4+,safari5.1+,opera12+,chrome)
每个语句结束后,使用分号(;)来结束;
变量
var obj;这个是声明,但没有初始化值,如果当打印obj这个只声明的变量时,会显示undefined(未定义
);
obj=[];表示把右边的数据传给左边obj这个变量,让这个obj变量在内存地址中生成一个唯一的id地址
变量:它是一种用于保存js任何您需要的数据类型(如整形,数组),且是动态的,当这个变量obj改变
了它的数据类型时,内存中的(唯一id)地址,也跟着改变
如果在function中使用var 来声明变量时,那么这个变量将是局部变量,如果function功能结束后,那么
在function中所有的(比如局部变量)将被gc(回收机制),如果在function中没有使用var来声明变量时
,这个变量将是全局变量
var多行定义:var f1=1,f2=2,f3=[];
注意:在严格模式下:不能使用eval或者arguments这类变量
数据类型:
undefined null boolean number string (特殊的数据类型:object)
typeof:检测给定的变量是什么数据类型(它是一个操作符,并非函数),如下
基本语法:typeof obj;
typeof会返回以下几种情况
undefined:未定义
boolean:布尔值
string:字符串
number:数值
object:对象或null
function:函数
undefined:使用var声明时,但未初始化时,那么就是undefined
var a=1,b=2,c=[];
a,b,c=b,a+b,c交换
判断类型:typeof obj ,obj instanceof objx(推荐使用它)
null空指针对象:(返回object对象)对于保存对象的变量还没有变成真正变量时,使用null,程序员给定
的,使用null可以明白相应的变量是否已经保存了一个对象的引用
undefined的值它是派生于null值的
undefined与null之间是相等操作符(true),主要目的是:转换其操作数
undefined对于一个变量没有需要显示的时候,还有,没有初始化obj的时候,计算机给的
boolean:true(不一定1),false(不一定0)
var t1=true;
var f1=false;
使用Boolean(obj)函数可以将obj强制转换为一个布尔值,返回的结果是true或者false;
Number:数值
整型:
十进制:var intNum=55;
八进制:070;(严格模式下,如果使用八进制将出现错误)
十六进制:0x25;
浮点:(是根据计算机精度来决定的),最高精度是17位小数,但在进行计算算术时会出现精度问题
0.1+0.2等于0.30000000000000004这样的方式
var floatNum=1.23;
number的最小范围:Number.MIN_VALUE(5e-324)
最大范围:Number.MAX_VALUE(1.7976931348623157e+308)
如果不在上面(最大和最小值范围)将自动转换为特殊的+-Infinity(无穷)值,它是一个无法进行计算的
特殊数据结构;
isFinite()函数,用于判断这个参数是否在最小与最大值之间,如果是true,否则是flase
如下
a=Number.MAX_VALUE+Number.MIN_VALUE
alert
(isFinite(a))
Number.NEGATIVE_INFINITY Number.POSITIVE.INFINITY也可以得到+-Infinity的值;
NaN:表示一个本来要返回数值操作符未返回数据的值(不会出现错误),在js中什么数除了0,均是NaN
特点:任何数与NaN进行计算(包括NaN)返回NaN
NaN不等于任何数据(包括NaN本身)
isNaN()函数,可以接受一个参数,用于判断是否不是数值,当isNaN()接受到一个值之后,会尝试将这
个值转换为数据,如果这个参数是非数值时,返回结果是true,如下
isNaN(‘‘)
isNaN()也适用于对象,如果调用isNaN()函数时,首先会调用对象的valueOf()对象,然后确定譔对象返
回的值是否可以转换为数值,如果不能,则这个返回值再调用toString()方法,再测试返回值
数值转换
Number()用于任何数据类型
规则:如果是布尔值,转换为0和1
如果是数字,则传入和返回
如果是null,返回0
如果是undefined,返回NaN
如果是字符串
如果字符串中只包含数字的(包括前面带正号或者负号情况),将转换为十进制,如
‘1‘会变成1,‘011‘会变成11(忽略11前面的0)
如果字符串中包含有效浮点格式,转换对应的浮点格式(规则与转换为数值类似)
如果字符串包含有效的十六进制格式,转换为大小相同的十进制整数
如果字符串为空,转换为0
如果字符串除上述条件之外的字符,均转为NaN
如果是对象,调用对象的valueOf()方法,然后按照上面的规则进行处理,如果返回是NaN,再调用对象
toString()方法,然后再次使用上面的方法进行处理,如下
parseInt()转换字符串,处理整数,如果第一个是数值字符或者负号,,它将继续解析下一个字符,直
到遇到非数字字符或者负号,如果遇到非数字或者非负号时,返回NaN
parseInt()支持八进制,十六进制,十进制等
parseInt(‘0x‘)返回
NaN,如果0x之后没有数值或者不是数值时
parseInt()第二个参数(指定几进制)
parseFloat()用法与parseInt()一样,但区别是:可以用于整型和浮点,如果遇到第一个小数点时是有
效的,当再次遇到第二个小数点时无效,如
22.35.4,会返回22.35
string:字符串,是不可变的,如果想改变这个字符串变量,那么必须先销毁这个字符串变量,然后重新
定义
在字符串,使用+:它是拼接
转换为字符串:str.toString(),默认情况下,不需要在toString()中使用参数,默认十进制方式返回数
值字符串,可以输出以十进制,二进制等相关几进制;
如果不清楚值是否是null或者undefined时,可以使用String()转换函数
String()转换规则
如果值有toString()时,则调用此方法(无参数)返回相应结果
如果是null,返回‘null‘
如果是undefined,返回‘undefined‘
null与undefined没有toString()方法
Object对象,使用object对象可以给实例对象添加属性和(或者)方法,也可以自定义对象
var o=new Object();
Object每个实例都具有以下属性和方法
constructor:保存创建当前对象函数:构造函数,就是Object()
hasOwnProperty(propertyName):用于检查给定属性在当前对象实例中(并非实例原型中)是否存在,
propertyName必须以字符串方式指定
isPrototypeOf(object):判断传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName):判断给定的属性是否能够使用for-in进行枚举,propertyName必
须以字符串方式指定
toString()返回对象字符串表示
valueOf()返回对象字符串,数值或者布尔表示,与toString()方法一样
toLocaleString():返回字符串表示,该字符串与执行环境地区对应
操作符
一元操作符
i++:先在i使用当前值,然后再加1
++i:先计算,后使用这个新值
++,--用于的规则可以在数值,字符串,布尔,浮点,对象等
如果是一个有效的数字字符串,转换为数值,然后回加减1,字符串变量变成数值变量
如果不是一个有效的数字字符串,将变量设为NaN,字符串变量变成数值变量
用于布尔时,将转换成0或者1再执行加减1,布尔值变量变成数值变量
浮点数值时,执行加减1操作
如果是对象的话,调用对象的valueOf()方法,然后按照上面的规则进行处理,如果返回是NaN,再调用对
象toString()方法,然后再次使用上面的方法进行处理
var o={
valueOf:function()
{
return -1;
}
};
一元加入只剩符:(+,-,*,/)等
obj=+obj,如果+/-放在obj前面,不会对+/-obj数值造成任何影响
位操作符(整形){暂时不讨论这部分}
布尔操作符
not(非) and(与) or(或)
not(!)
规则
以下情况如果使用not条件式,均返回false
如果是对象/非字符/非0数值
除以上情况均是true
js中可以使用奇数!表示为 not 偶数!表示取反
and(&&):表达式1与表达式2同时为true时才能为true
第一个是对象,返回第二个条件
有一个是null,则返回null
有一个是nan则返回nan
有一个是undefined,则返回undefined
or(||)
条件表达式中,其中某个为true,则为true
如果第一个是对象,则返回第一个
如果第一个条件为false,则返回第二个
如果2个都是对象,则返回第一个
如果2个都是null/nan/undefined,返回null/nan/undefined;
乘法:*
规则;
如果是数值,则执行常规计算,无论是2个正数还是2个负数计算结果都是正数,如果其中一个是有符号
的,那么返回的结果是负数,如果相乘之和超出范围时,则返回Infinity或-Infinity
如果其中一个是nan,则返回nan
如果infinity与0相乘,则返回nan
如果infinity与非0数值相乘,返回+/infinity
如果infinity相乘,则返回infinity
如果其中某个并非数值,那么将会在后台调用Number()将转换成数值,然后根据上面的规则进行计算
除法(/)
它的规则与乘法类似
如果是数值,则执行常规计算,无论是2个正数还是2个负数计算结果都是正数,如果其中一个是有符号
的,那么返回的结果是负数,如果相乘之和超出范围时,则返回Infinity或-Infinity
如果其中一个是nan,则返回nan
添加几条不同的
0除以0,返回nan
非0除了0,返回+-infinity
如果infinity相除,则返回nan;
如果infinity被任何非0数值除,返回+-infinity
如果其中某个并非数值,那么将会在后台调用Number()将转换成数值,然后根据上面的规则进行计算
求模(%)
它的规则与乘法类似
如果是数值,则执行常规计算
如果其中一个是nan,则返回nan
如果被除数是无穷大值而除数是有限大的数值,返回nan
如果被除数是有限大而除数是0,返回nan
如果infinity相除,返回nan
如果被除数是有限大的数值,而除数是无穷大的数值,则结果是被除数
如果被除数是0,返回是0
如果其中某个并非数值,那么将会在后台调用Number()将转换成数值,然后根据上面的规则进行计算
加号(+)
不是字符串时
如果相加的并非是字符串,那么进行常规计算
如果+/-infinity之间计算,则返回+/-infinity
如果infinity与-infinty进行计算,返回nan
如果+/-0之间的计算,那么是常规计算
除-0+-0等于-0外
如果是字符串(+),那么进行拼接
如果只有一个操作符是字符串,那么将另一个转换为字符串,然后再拼接
如果操作符是一个对象,数值,或者布尔,那么调用它们的toString()方法取得对应的字符串值,然后
根据上面的规则,对于null和undefined分别调用String()函数并取得字符串‘null‘和‘undefined‘
减法(-)
规则:
如果均是数值,进行常规计算
如果某个是nan,返回nan
infinity与infinity计算,返回nan
-infinity与-infinity计算,返回nan
infinity与infinit-y计算,返回infinity
-infinity与infinity计算,返回-infinity
如果其中一个是字符串,布尔值,null或者undefined先从后台调用Number()函数转换为数值,然后根据
减法规则,如果转换结果是nan的话,那么结果就是nan;
调用对象的valueOf()方法时,如果得到的结果是nan,那么返回nan,如果没有valueOf()方法,则调用
toString()方法,然后将字符串转换为数值;
关系操作符
<,>,>=,<=,!=,==
规则:
如果比较的是数值,那么就执行数值比较
如果是字符串比较,那么取得对应字符串的编码
如果其中一个是数值,那么另一个将转换为数值,然后再进行比较
如果其中一个是对象,那么先调用对象的valueOf()方法时,然后使用上面的规则,如果没有valueOf()方
法,如果对象没有valueOf()方法,则调用toString()方法,并根据上面的结果进行执行比较
如果其中一个是布尔,那么先转换成数值,然后再比较
如果其中某个与nan比较,永远返回false
当字符串与数值比较时,永远都返回false,因为字符串被转换成nan了
总结:任何操作数与nan进行比较时,永远都是false;
相等操作符(==与!=):先转换再比较,全等与不全等--仅比较而不转换
规则
如果其中一个是布尔,在比较相等之前先将其转换为数值--false(0)而true(1)
如果一个是数值,另一个是字符串,那么先将字符串转换为数值,然后再比较
如果一个是对象,另一个不是,那么调用对象valueOf()方法,然后按照上面规则进行比较
如果2个操作符在进行比较时,使用以下规则
null与undefined是相等的
要比较相等之前,。不要将null与undefined转换成其他任何值
如果其中一个是nan,那么返回结果是false,而不相等返回true
nan之间比较,永远为false,,也就是nan不等于 nan
特殊值
true==2;false
undefined==0;false
null==0;false
‘5‘==5;true
str.toLowerCase()小写
str.toUpperCase()大写
全等(===)不在转换,仅比较,如果结果为false时,因为对应的数据类型不同
条件表达式
三元操作符exr0 ?exr1:exr2
赋值操作符:将右边的值赋给左边变量
+=,-=,*=,/=
<<=左移 >>=右移
>>>=无符号右移
多行语句
var a=1,b=2,c=2;
var num=(1,2,3,4,5);结果num是5,会取得num的最后一个值
语句体
if语句
语法
if(表达式1){
语句体1
if(表达式_0){
}else{
语句体
}
}else if(表达式2){
语句体1
}else{
语句体3
}
如果if条件表达式为true时,执行if语句下面的语句体,else if else相关语句不再执行
如果if条件表达式为flase时,执行else if(如果多个时,根据情况为true时,执行) else不在执行
如果上面的条件均不满足时,执行else语句
do-while后测试循环语句,即只有在循环体中代码执行后,才测试出口条件(至少会执行一次代码请求)
语法
do{
语句体
}
while(表达式);
while语句(一般情况,如果是没有顺序,使用它)
语法
while(表达式){
语句体
}
for循环
语法:
for(表达式1,表达式2,表达式3){
语句体
}
for循环与while循环其中就是一样的
在for循环中,变量初始化表达式中,可以不使用var关键字,可以在外部生成 这个变量,因为外部变量
可以在for循环中访问到
var count=0,i=1;
for(i;count;i++){
}
死循环
for(;;){
}
while(true){
}
for-in迭代语句体(和python中的类似:枚举)
语法
for(迭代别名 in 表达式){
语句体
}
在使用for-in之前,会检测对象的值是否存在null或undefined
}
(1*)label语句
语法
label:表达式;,常用for等循环一起使用
作用:是在代码中添加标签,以方便未来使用
break(跳出循环,不在执行)和continue(跳出本次循环,然后从循环顶部继续执行)与label语句联合使
用
且在break/continue后面可以添加一个变量,如下
label:for(){
break label
}
with语句
语法:
with(表达式){
语句体
}
作用:将代码的作用域设置到一个特定的对象中,主要是为了简化多次编写同一个对象时
缺点时,使用with会让性能下降,在开发中,不建议使用
(10*)switch语句
语法
switch(表达式){
case v1:表达式
break
....
case vn:表达式n
break
default:
表达式
}
它的语法与if语句类似
注意:在case中省略break时,将会继续执行下一个case语句中的代码
default用于在表达式中不匹配前面所有case语句中
如果在case中省略了break,建议在case下面使用注释来说明情况
这边的v1不仅仅只能表示数值,也可以表示其他数据类型,如对象等
函数
语法
function funcname(形参){
函数主体
}funcname(实参)
形参也是局部变量
function funcname(形参<传值>){
var funcname;局部变量
}
funcname(实参 传值) 实参是全局变量
在js中,function中括号里面的参数,无论给多或者不给,js永远不会报错,也不会关心传入的参数是
什么类型,因为在js内部机制中使用一个数组来表示,,即使这个参数为0或者更多,js也没有什么错误
提示
数组的长度:array.length
arguments.lenght可以获取函数名中传递给函数多少个参数
arguments[int]它还可以和参数一起使用
arguments它的值永远与对应命名参数的值保持同步