JS的使用方法:
1.从外部文件中导入
2.内部链接,<script></script>
3.嵌入标签
JS基本语法
1.执行顺序:按照HTML文档中出现的顺序依次执行
2.大小写敏感性:严格区分大小写
3.忽略空格符和换行符
4.语句分割符:
1)使用;结束语句
2)可以把多个语句写在一行
3)最后一个语句的分号可以省略,最好不要省略。
4)可以使用{},组成一个block块
5)可以用\对代码析分
6)注释,/**/和//
7)JavaScript保留字体:if switch等等
8)document.write()向文档书写内容;console.log向控制台书写内容;
9)错误调试:通过控制台调试语法错误;通过alert调试逻辑错误
10)<noscript></noscript>不支持js代码时的操作。
变量
声明变量
1.关键字var声明变量
var a; var a,b,c;
2.可以声明变量并赋值
var a=12;
3.可以同时声明多个变量
var a=b=c=1;
4.只声明变量并未对其赋值,显示undefined
5.如果变量重名产生覆盖
6.变量以字母或者下划线开始,包括字母下划线或者数字。变量最好含义明确,驼峰标记法,firstName,FirstName,下划线法first_name
7.内存中的存储与释放
收集方式,收集内容,回收算法
数值类型
1.十进制:12,1e12
2.十六进制数:0x123
3.八进制数:0123
4.特殊值:NaN不存在的数值类型:通过isNaN()判断,不能通过NaN==NaN判断,Infinity无穷大
字符串类型
1.单引号或者双引号;
2.转意符号
布尔型
1.true或者false
特殊数据类型
1.undefined:声明变量未赋值或者赋值不存在
2.null:空值
3.NaN唯一一个不能和自身进行比较:NaN===NaN返回false
==:比较数值
===:比较是否为同一变量
数据类型转换
1.隐式转换
转换为布尔类型
false:undefined, null, 0,NaN,字符串长度为0
true:其他对象
转换为数值类型
null->0
true->1,false->0
数值转数字,否则转为NaN
undefined,其他对象->NaN
转换为字符串类型
数值类型转换为对应的,其他对象无toString转换为undefined
2.显式转换
布尔类型:Boolean()
字符串:String()
数值类型:Number(),必须全部都能转换为数值
parseInt(),parseFloat:注意字符串转换到第一个非法数字,true转换为NaN,开头允许空格
===严格等于数值和类型必须都相等,!==不严格等于
逗号运算符:返回最后一个以表达式的值
void运算符:返回undefined
typeof运算符:值的类型
&&短路:如果第一个表达式为false,后边的表达式短路
||短路:如果第一个表达式为true,后面的表达式短路
instanceof:判断是否为某一对象
判断语句
if else if else
条件判断语句
switch case
循环语句
for(var i=0;i<10;++i){
}
while(){}
do{}while
中断语句
continue跳转到下次循环
break终止循环
document.write('');
函数编程
arguments[n]:代表函数中传入的第n个参数
构造函数
匿名函数
参数作用域
全局变量与局部变量
var定义,按照var定义的位置判断
不带var定义,为全局变量
函数无参数,解决方法:
第一种
function f(x,y){
x=x||0;
y=y||0;
return x+y;
}
第二种
function f(x,y){
if(x===undefined)
x=0;
y=y==undefined?0,y;
}
return x+y;
}
第三种
function f(x,y){
x=arguments[0]?arguments[0],0;
y=arguments[1]?arguments[1],0;
return x+y;
}
第四种
function f(){
var sum=0;
var paramNumber=arguments.length;
for(var i=0;i<paramNumber;++i){
sum+=arguments[i];
}
return x+y;
}
JS中常用的全局函数:
parseInt:转换为int
parseFloat:转换为float
isFinite():检测是否为无穷值
isNaN:检测是否为非数值类型
编码url
encodeURI(url):编码
decodeURI(url):解码
encodeComponent(url):编码
decodeComponent(url):解码
编码字符串:
escape()编码
unescape()解码
eval(str)执行字符串的js命令
Number(Date())返回毫秒数
String()
匿名函数:function (a){return a+1}
回调函数:function f(f1,2){ return f1()+2;}
call()
apply() 参数为数组
自调函数:(function(a,b){return a+b})(1,2)
对象:类似java中的HashMap
创建对象
第一种: var test={
'x':12,
"y":13,
z:"15"
}
第二种:
new Date();
第三种
function Test3(x,y){
this.n1=x;
this.n2=y;
}
new Test3(1,2)
第四种
Object.create({x:1})
创建空对象
Object.create(Object.prototype)
对象属性:
var person={
username:'king',
age:12,
addr:'北京',
sex:'男',
sayHi:function(){
return "hi";
}
}
查询:person.username或者person['addr']
删除:delete person.username
修改:person.username='queen'
增加:person.school='high'
遍历:for(var i in person){}
调用方法:person.sayHi();
对象的原型:null->object原型->建立的对象
prototype属性向对象的原型赋值。
检测是否有某个属性:属性值 in 对象
检测对象自己的属性不包括继承的属性方法,hasOwnProperty()
属性的特征:writable修改,Enumerable枚举,configurable删除,value属性的值
propertyIsEnumerable()属性是自己的,并且是可枚举的。
遍历属性:
1.for(object in Object)
2.Object.getOwnPropertyNames():返回所有自由属性名称。
3.Object.getkeys():返回所有自由属性
Object.defineProperty():定义对象的属性,包括可枚举,可修改,可删除,赋值等。
get:未定义某属性值时,得到属性值
set:设置某属性值
Object.defineProperties():同时设置多个属性值
Object.defineProperties(person,{
username:{value:'king',writable:true},
age:{value:23,writable:true}
})
Object.getOwnPropertyDescriptor(person,'username')
对象的原型:prototype
对象的属性:class
classof
toString
对象的扩展标记:extensible flag
Date对象
正则表达式
try{}catch(e){}finally{}
数组
创建数组:
1.数组字面量的形式arr=[]
2.通过Array()创建数组,new Array(); new Array(5);new Array(1,2,3);
数组操作:
1.push,pop,shift,unshift,delete
遍历数组:
for 遍历下标;for in遍历数组; forEach遍历数组;
数组方法:
事件:
事件模型:
1.内联模型:事件处理函数作为属性执行js代码或者函数。
2.脚本模型 :事件处理程序
3.DOM2事件
冒泡事件:连续触发多个事件
捕获事件:addEventListener ,removeEventListener
onload事件
表单验证插件