一:JavaScript概述
此为脚本语言,需要结合其他语言组合使用 ,
不需要编译;每解释一条语句就执行一条语句
。
控制CSS的样式,
可以对表单项进行校验,
对HTML元素进行动态控制。
安全性(没有访问系统文件权限,无法用来做木马病毒)
交互性(JavaScript控制HTML元素)
跨平台性(浏览器有JS的解析器,只要有浏览器就能运行JS代码,和平台无关)
二:JavaScript组成
ECMAScript (核心):描述了JS的语法和基本对象。
DOM 文档对象模型:处理网页内容的方法和接口
BOM 浏览器对象模型:与浏览器交互的方法和接口
三:JavaScript和HTML的结合方式
内部使用<script type=”text/javascript”>JavaScript的代码</script>
外部引用<script type=”text/javascript” src=”javascript文件路径”></script>注意:外部引用时script标签内不能有script代码,即使写了也不会执行
单行注释//
多行注释/* */
四:变量
格式:var 变量名 = 变量值;//变量名区分大小写
JavaScript中的变量声明要用var关键字(不用var声明的都是全局变量)
变量名只有一种类型——————引用数据类型
变量值的数据类型分为:原始数据类型和引用数据类型
原始数据类型
string:字符串类型“”和’’都表示字符串
boolean:
number:数字类型,
整数、小数和NaN(Not a Number)其中
NaN!=NaN
null:空,对象的占位符,表示引用类型的对象不存在,
一般用于进行废除对象。(即每当一个对象不用时,手动设置其为空,在函数结束或者其他情况,无用存储单元收集程序会将其回收)
undefined:即声明变量未赋值,系统会自动赋值undefined
变量声明未定义:
var str;
alert(str);//undefined
变量未声明就使用:
alert(aaaccc);//报错,并且截断JAVASCRIPT代码
特别注意:undefined==undefined
变量值的类型可以用typeof()来判断。
例如:var str=”aa”;alert(typeof(str));//string
typeof 运算符对于 null 值会返回 "Object"
现在,null 被认为是对象的占位符,但从技术上来说,它仍然是原始值
undefined是从null派生出来的,
因此在判断时 null==undefined得到的结果是true
引用类型通常叫做类(.class),遇到引用值,所处理的就是对象。但从传统意义上来讲,JavaScript并无真正的类。
例如:var obj = new Object();
或者
var obj = new Object;
Object是JavaScript中使用最多的一种类型,用来储存和传输数据
注:instanceof可以用来判断对象是否属于某类型。返回true和false .
字符串转换成数字:
<script type="text/javascript">
var v="123456.89";
var v1="123456";
var v2="1234a56";
var v3="a123456";
// alert(parseInt(v)); //123456
// alert(parseFloat(v1));//123456
// alert(parseInt(v2));//1234
//alert(parseInt(v3));//NaN
</script>
强制类型转换 (返回值都是原始数据类型):
Boolean(value)若value值存在或有意义,则为true;
Number(value) - 把给定的值转换成数字(可以是整数或浮点数)。
String(value) - 把给定的值按照 字面值 转换成字符串;
五:运算符和判断符,循环
+符号:
算术运算加,
字符串连接符,
number转换符(其他类型强转number):
例如:var str = +"11";
-符号 :
算术运算减(会把其他值强转为number类型进行减法运算),
number转换符(其他类型强转number,区别于+,都是负数)
=,+=,-=先以算术运算符规则进行运算,再进行赋值。
== 逻辑等。比较值,类型可以不同,例如8=="8"成立
=== 全等。 比较值和类型。如果值和类型都相同,则为true;
!= 不等。比较值
&& 逻辑与;
||逻辑与;
!非
:此三者常常和if组合使用,
最终都会强转成boolean类型。
var val=(表达式)?value1:value2
表达式最终运算后都会强转成boolean类型
if(表达式){}else{}中的表达式最后都会强转成boolean类型
switch(n)
{
case 1:
执行代码块 1
break
case 2:
执行代码块 2
break
default:
如果n即不是1也不是2,则执行此代码
}
Switch会对值和值的类型进行全等比较(既要比较类型又要比较值)
传统for循环:for(var i=0;i<=8;i++){// 循环体}
高级for循环:for(var 变量 in 对象或数组){// 循环体}
区别于Java:遍历数组时,其中遍历变量代表的是数组的下标和属性。
对象.属性方式不支持动态调用。所以在FOR…IN遍历中,per.p无法取得对应属性值
六:对象
Number对象
*var num = 10;//伪对象,值是原始数据类型
*var num = new Number(10);//值是引用数据类型,如果省略构造参数,默认为0
*var num = Number(10);//强转,伪对象,值是原始数据类型
Boolean对象
*var flag = false;//伪对象
*var flag = new Boolean(false);//对象 引用数据类型的值 没有参数的话,默认falses
*var flag = Boolean(false); //伪对象
有意义的都是true,否则都是false
String对象
* var str = "abc";//伪对象
* var str = new String("abc");//如果省略,默认为空字符串
*var str = String("abc");//伪对象
String属性length长度
这些对象都可以通过变量名调用valueOf()获取字面值
<script type="text/javascript">
var v="abcdefg";
// alert(v.charAt(0));//a
// alert(v.concat("hig","lmn"));//abcdefghiglmn
//alert(v.indexOf("cd",0));//2//从第0位开始搜索字符串c
//alert(v.indexOf("cd"));//2
var v2="jkkkkk";
//alert(v2.replace("k","o"));//jokkkk
//alert(v2.replace(/k/g,"o"));//jooooo//使用正则表达式
var v3="abc-def-gh";
//alert(v3.split("-"));//abc,def,gh
//alert(v.substr(2,3));//cde//从第2位开始获取字符串,长度是3
// alert(v.substring(2,3));//c//从第2位开始到第3-1位的字符串
//alert(v.toLowerCase());//abcdefg//小写
//alert(v.toUpperCase());//ABCDEFG//大写
//以上函数都不会对原本字符串更改
</script>
Array数组对象
<script type="text/javascript">
var v=new Array();//没有填充的数组位置上都是undefined
v[5]=89;
v["name"]="哈哈";//这里就属于设定数组的属性了
v[7]="re";
//alert(v.length);//8//注意长度不包括数组属性
for(var i=0;i<v.length;i++)
{
alert(i);//显示的是数组角标
alert(v[i]);//显示数组元素,没有显示属性name
}
</script>
<script type="text/javascript" >
var v=new Array(1,2,3,4,5);
//alert(v.join("-"));//1-2-3-4-5//对原数组没有影响
//alert(v);//1,2,3,4,5
// alert(v.concat(67,76)+":"+v);//1,2,3,4,5,67,76:1,2,3,4,5//对原数组没有影响
//alert(v.pop()+":"+v);//5:1,2,3,4//删除并且返回最后元素,对原数组有影响,如果数组为空返回undefined
//alert(v.shift()+":"+v);//1:2,3,4,5//删除并返回第一个元素,对原数组有影响,如果数组为空返回undefined
//alert(v.push(8)+":"+v);//6:1,2,3,4,5,8//在数组后面添加8,并返回数组长度
//alert(v.unshift(8)+":"+v);//undifined:8,1,2,3,4,5//在前面添加元素,没有返回数组长度
// alert(v.reverse()+":"+v);//5,4,3,2,1:1,2,3,4,5//物理反转
var v2=new Array(9,90,3,30);
//alert(v2.sort());//3,30,9,90//默认按照字典顺序排列
alert(v2.sort( function sortNumber(a,b)//类似于java中的匿名内部类
{
return a-b;
}));//3,9,30,90//这就是自定义排序
</script>
Date对象
<script type="text/javascript">
var v=new Date();//获取系统当前详细时间
//现在是2015年9月21号星期一
//alert(v.getFullYear());//2015
//alert(v.getMonth());//8//注意获取的月份是比实际月份要减一
//alert(v.getDate());//21//获取一个月中的第几天
//alert(v.getDay());//1//获取一个星期中的第几天
//alert(v.toLocaleString());//2015年9月21日14:42:36//以当前系统时间格式显示时间
//alert(v.setTime(85421));//以毫秒为单位设置时间
//alert(v.getTime(85421));
//alert(Date.parse("2015/9/21 14:42:36"));//1442817756000//按照字符串形式的时间变成对应的毫秒值,相当于静态函数
//获取2015年7月1号到8月2号的天数
var long1=Date.parse("2015/7/1");
var long2=Date.parse("2015/8/2");
//获取之间的天数/(24*60*60*1000)
alert((long2-long1)/(24*60*60*1000));//32
</script>
Math对象
<script type="text/javascript">
//alert(Math.random());//随机产生一个0到1之间的伪随机数(不包括1)
//alert(Math.round(67.12));//67//四舍五入
//alert(Math.round(67.99));//68
//alert(Math.round(-67.12));//-67
//alert(Math.round(-67.99));//-68
//alert(Math.ceil(67.12));//68//获取最接近的最大整数
//alert(Math.ceil(67.99));//68//
//alert(Math.ceil(-67.12));//-67
//alert(Math.ceil(-67.99));//-67
//alert(Math.floor(67.12));//67//获取最接近的最小整数
//alert(Math.floor(67.99));//67
//alert(Math.floor(-67.12));//-68
//alert(Math.floor(-67.99));//-68
</script>
RegExp对象
<script type="text/javascript">
var s=" ab cdefg ";
var reg=/^\s*$/;//只要有空格就不可以,是较为严格的规则
var reg2=/\s*/;//就算有空格,只要还有其他非空格就可以
alert(reg.test(s));//false
alert(reg2.test(s));//true
</script>