1.JavaScript的概念
JavaScript用于网页和用户之间的交互,javascript由语言基础,BOM和DOM组成。
语言基础包括函数,作用域,运算符,条件,循环等。
DOM 是Document Object Model( 文档对象模型 )的缩写。
BOM即 浏览器对象模型(Browser Object Model)。
2.JavaScript的语言基础
1.javascript的御用标签script标签和css的style标签类似,script标签一般放在head标签内。若有多段script标签是不会换行的。
2.大型项目中,javascript的代码过多时,一般通过调用外部文件来实现代码的美观性。即在html标签内调用。
注:在javascript文件中不必再使用script。
3.javascript的调试方法和纠错方法
一般初学者推荐使用记事本来编写,而在记事本编写时会出现错误时,我们应该学会调试。下面我们介绍两种调试方法。
1)使用alert进行调试
alert(1)会弹出对话框,若里面内容为1则说明以上的代码是正确的,通过移动alert(1)的位置,来缩小错误的位置。
2)使用浏览器进行调试(以firefox为例)
快捷键F12,出现console页面,输出错误和调试信息
注: 可能第一次F12是看不到错误的,因为错误已经发生了,才打开了F12。 所以使用快捷键F5刷新一下当前页面,就可以看到控制台报出了错误的原因。
JavaScript一旦某一位置的代码发生错误,则其以下的代码都将无法运行。
JavaScript提供了一种try catch的错误处理机制,当有错误抛出的时候,可以catch住。这些之后的代码便能够继续运行。
try{发生错误的代码},catch(err){可有可无}。
4.变量
var加变量名,var可有可无。
变量的不同类型
以下变量都是动态类型(即var)
1.undefined,声明但未赋值。var x;
2.boolean,布尔类型。var x=true/false;
3.number,数字类型。var x=10 ;
4.string,字符串类型。var x=hello;
5.对象。后面再说。
判断变量类型,使用typeof,
例:document.write("类型是:"+typeof x)。具体意思我们后面再说。
所有的变量都是“伪对象”(这里不做介绍),具有属性。
使用length可以获取其长度。例:var a=hello document.write(a.length)。
所有基本变量类型都可以相互转化。
1.转化为字符串
toString,将其他类型转化为字符串。例: var a=10 document.write(a.toString)。
注:当数字转化为字符串时,有两种模式。默认模式和基模式。默认模式则转化为十进制,基模式可以转化为其他进制。例:a.toStribng(数字(进制数))。
String也可以将其他类型转化为字符串。但是在转化null(空对象)的时候,String会出现错误,导致后面的代码都无法执行。
2.转化为数字
内置函数parseInt()和parseFloat()。parseInt转化为整数,parseFloat转化为浮点数。
这两个函数会一直定位数字,直到出现字符结束,若转化的字符串开头是字母,则会得到NaN(Not a Number)。
例:document.write(parseInt(10a3);结果为10; document.write(parseInt(a3);结果为NaN。
内置函数Number()。若转化的字符串中既有数字和字母,则会得到NaN(Not a Number)。
例:document.write(Number(10a3);结果为NaN。
3.转化为布尔
内置函数Boolean(),当转换字符串时:非空即为true;当转换数字时:非0即为true;当转换对象时:非null即为true。
运行结果:
5.函数
学过c,c++,java的都应该会理解。
函数包括定义和调用。
function 函数名(参数){内容,根据参数确定是否有返回值}进行调用;函数名(变量)进行调用。
例: 运行结果:
参数具有作用域,超出函数就看不见参数。通俗来说,就是各个函数是单独,函数内定义的局部变量,其他函数无法调用,而全局变量则不会。
6.运算符和结构
没错,JavaScript也有运算符,算数运算符和逻辑运算符。结构有条件结构和循环结构。
这些不必多说,学过编程语言(C,C++等)的应该都知道。但我们这要额外介绍一个逻辑运算符,绝对等和绝对不等。
===、!==,这和==和!=的区别在于前者不但判断变量数值而且还有变量类型是否相同,也就是之前所说的变量类型。
条件结构即if,else if,else和switch语句,循环结构即while,do while,for语句以及结束循环的continue,break。不过循环中增加了增强型循环语句,大家可以去参考Java。
7.对象
首先,对象和数据类型相似但是不一样。对象包括数字(Number),字符串(String),数组(Array),日期(Date),Math和自定义几类。
通过new+类型名。
如:var x = new Number(123)新建数字对象。
数字对象的属性包括最大值和最小值。通过Number.Min_VALUE和Number.Max_VALUE
可知Number对象的最小值:5e-324Number对象的最大值:1.7976931348623157e+308
之前介绍过NaN,这里还有不一样的意思。若在新建数字对象时,采用的不是数字,则会输出NaN。如:var x = new Number(“123abc”)
但是我们判读是否位数字应该使用isNaN函数,是则返回true,否则返回false。
下面介绍输出小数表达,科学记数法表达。
如:var x = new Number(123)
document.write(a.toFixed(2(小数的位数)));
运行结果:123.00
document.write(a.toExponential());
运行结果:1.23e+2
要想返回数字对象的基本类型,可使用valueOf()将对象转化为数字类型
如:var x = new String(”abc“)新建数字对象。
字符对象和字符数据类型一样,也有长度。通过x.length返回字符串对象的长度。
字符对象还有很多功能。
返回指定位置的字符:x.charAt(位置)返回指定位置的字符,x.charCodeAt(位置)返回指定位置的字符对应的ASCII码。
字符串拼接:concat将两个字符串对象连接起来x.concat(y)把y连接到x的末尾。
子字符串出现的位置:indexOf返回子字符串第一次出现的位置,lastIndexOf返回子字符串最后一次出现的位置。x.indexOf/lastIndexOf(子字符串)。
比较两段字符串是否相同:x.localeCompare(y),0 表示相等,1 表示字母顺序靠后,-1 表示字母顺序靠前(均为x相对于y)。
截取一段子字符串:x.substring(0,3)截取0到3的字符串(字符串以0开始)。
根据分隔符,把字符串转化为数组:x.split(" ",长度(可选)),将x转化为数组。
替换子字符串:x.replace("子字符串","子字符串"),若出现相同的子字符串,一般替换第一个。若要都替换则,
x.replace(/子字符串/g, "子字符串");或者var regS = new RegExp("子字符串","g");x.replace(regS, "子字符串");
返回基本类型:所有返回字符串类型的方法即字符对象定义后发生字符类变化,返回的都是基本类型的String。
如:var x = new Array()新建数组对象
创建数组对象的3种方式:
1. new Array() 创建长度是0的数组
2. new Array(5); 创建长度是5的数组,,但是其每一个元素都是undefine
3. new Array(3,1,4,1,5,9,2,6); 根据参数创建数组
数组也有长度,和字符串获取长度一样,通过x.length。
遍历数组:采用循环遍历数组
连接数组:concat将两个数组对象连接起来x.concat(y)把y连接到x的末尾。
根据分隔符,把数组转化为字符串:x.join(),括号内的内容会分隔数组内的元素。
插入数据和获取数据:push pop,分别在最后的位置插入数据和获取数据(获取后删除)
unshift shift ,分别在最开始的位置插入数据和获取数据(获取后删除)
var x = new Array(3,1,4)
x.push(5)将5插入到数组的最后,得到3,1,4,5
x.pop()将最后的4删去,得到3,1
x.unshift(5)将5插入到数组的开头得到5,3,1,4
x.shift()将开头得3删去得到1,4
数组排序:x.sort()进行排序,默认按照从小到大的顺序
若要自定义排序(按照由大到小的顺序排列),就把比较器函数作为参数传递给sort(),
function comparator(v1,v2){
return v2-v1; //v2-v1表示大的放前面,小的放后面
}
x.sort(comparator)即可实现。
数组反转:x.reverse()对数组内的元素倒序输出。
获取子数组:x.slice(start,end),start从第几元素开始,end到第几元素结束。
删除和插入数组元素:x.splice(start,num),start从第几元素开始,删除num个元素。若num后面还有参数则表示插入具体的参数。
如:var x = new Date()新建日期对象
获取当前的年月日:x.getFullyear(),x.getMonth()+1(0代表1月份),x.getDay()。
获取时分秒毫秒:x.getHours(),x.getMinutes(),x.getSeconds(),x.getMilliseconds()。
获取星期:(0代表星期天)
var day=new Date().getDay(); //通过日期对象获取数字形式的星期几
var weeks = new Array("星期天","星期一","星期二","星期三","星期四","星期五","星期六");
weeks[day]得到星期。
修改日期和时间:x.setFullyear(),x.setMonth(),x.setDay()。x.setHours(),x.setMinutes(),x.setSeconds(),x.setMilliseconds()。括号内为想要修改的数字,月份要格外注意哦。
如:var x = new Math()新建数学对象
数学对象即自然对数,圆周率,绝对值,最大最小,幂等等
自然对数:Math.E
圆周率:Math.PI
绝对值:Math.abs()
最小值最大值:Math.min(),Math.max()
幂:Math.pow()
四舍五入:Math.round()
产生随机数:Math.random()(是产生0~1的随机数,如需产生其他范围的随机数,则需要通过运算来进行改变)。
如:var x = new Object()新建自定义对象
自定义对象需要给对象取一个名字,x.name = 值,之后则只需要调用它的名字进行操作x.name。
不过,new Object创建对象有一个问题是,没创建对象都要重新定义属性和函数,代码的重用性不高。
我们采用function设计一种对象。
定义:function x(参数){},调用:var y= new x(参数)。
若你想在之前的对象上追加对象,需要用到prototype,x.prototype.z{}即可。