JavaScript的数据结构包括:标识符、关键字、常量、变量等。
标识符,就是一个名字。在JavaScript中,变量和函数等都需要定义一个名字,这个名字就称为“标识符”。
(1)第一个字符必须是字母、下划线(_)或美元符号这3种其中之一,其后的字符可以是字母、数字或下划线、美元符号;
(3)标识符不能和JavaScript中用于其他目的的关键字同名;
JavaScript关键字是指在JavaScript语言中有特定含义,成为JavaScript语法中一部分的那些字。
常量,顾名思义就是指不能改变的量。常量的指从定义开始就是固定的,一直到程序结束。
常量主要用于为程序提供固定和精确的值,包括数值和字符串,如数字、逻辑值真(true)、逻辑值假(false)等都是常量。
JavaScript数据类型有2大分类:一是“基本数据类型”,二是“特殊数据类型”。
(1)数字型(Number型):如整型84,浮点型3.14;
根据个人的开发经验中,只需要记忆\n、\'、\"这3个就已经够初学者走很远了,其他的转义字符完全没必要去记忆,到时候需要的时候再回来查表就行了
逻辑中断:&&表达式1为真则返回表达式2,表达式1为假就返回表达式1
typeof运算符用于返回它的操作数当前所容纳的数据的类型,这对于判断一个变量是否已被定义特别有用。
例如:typeof(1)返回值是number,typeof("javascript")返回值是string。
在JavaScript中,将字符串型数据转换为数值型数据有parseInt()和parseFloat()这2种方法。其中,parseInt()可以将字符串转换为整型数据;parseFloat()可以将字符串转换为浮点型数据。
parseInt() //将字符串型转换为整型
parseFloat() //将字符串型转换为浮点型
number('12')
在JavaScript中,将数值型数据(整型或浮点型)转换为字符串,都是使用toString()方法。
var num =10;
var str = num.toString();
alert(String(num));强制转换
alert(num+'');拼接法
JavaScript程序按照在HTML文档中出现的顺序逐行执行。如果需要在整个HTML文件中执行,最好将其放在HTML文件的标签中。某些代码,如函数体内的代码,不会被立即执行,只有当所在的函数被其他程序调用时,该代码才会被执行。
JavaScript是严格区分大小写的。例如str和Str这是两个完全不同的变量。
在JavaScript中,语句的分号“;”是可有可无的。但是我们强烈要求大家在每一句语句后面加一个分号“;”,这是一个非常重要的代码编写习惯。
另外,JavaScript会忽略多余的空格,用户可以向脚本添加空格,来提高代码的可读性,说白了就是让代码“漂亮点”,读得舒服一点。
var str="the way of self-study";
var str = "the way of self-study"; //这一行代码读起来舒服一点
在编写JavaScript代码时,我们经常要在一些关键代码旁做一下注释,这样做的好处很多。
//单行注释内容
/*多行注释内容*/
“//”是单行注释方式,如果你的注释内容只占一行就应该使用这种注释方式。“/**/”是多行注释方式,如果你的注释内容占多行建议使用这种注释方式。
JavaScript对程序流程的控制跟其他编程语言是一样的,主要有3种:
break语句与continue语句的主要区别是:break是彻底结束循环,而continue是结束本次循环。在这一点跟其他编程语言(如C和Java)相同。
(1)题目:计算100以内所有奇数的和比较简单,使用for语句就可以实现。
<script type="text/javascript">
var sum=0;
for(var i=1;i<100;i+=2)
{
sum+=i;
}
document.write("100以内所有奇数和为:"+sum);
</script>
“i+=2”等价于“i=i+2”,“sum+=i”等价于“sum=sum+i”
题目:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数的本身。例如,153就是一个水仙花数,因为153=1+125+27。
<script type="text/javascript">
document.write("水仙花数有:");
for(var i=100;i<1000;i++)
{
var a=i%10;//提取个位数
var b=(i/10)%10 //提取十位数
b=parseInt(b);
var c=i/100;//提取百位数
c=parseInt(c);
if(i==(a*a*a+b*b*b+c*c*c))
{
document.write(i+",");
}
}
</script>
parseInt()函数是将一个数转换为整型数据,我们在“JavaScript类型转换”遇到。
题目:找出字符串中“how are you doing?”中所有小于字母“s”的字符,并在页面输出。
<script type="text/javascript">
var str="how are you doing?";
var result="";
for(var i=0;i<str.length;i++)
{
if(str.charAt(i)<"s")
{
result+=str.charAt(i)+",";
}
}
document.write(result);
</script>
这些是字符串的内容,这些在“JavaScript字符串对象”中
函数,就是一个一系列JavaScript语句的集合,这是为了完成某一个会重复使用的特定功能。在需要该功能的时候,直接调用函数即可,而不必每次都编写一大堆重复的代码。并且在需要修改该功能的时候,也只要修改和维护这一个函数即可。
总之,将语句集合成函数,好处就是方便代码重用。并且,一个好的函数名,可以让人一眼就知道这个函数实现的是什么功能,方便维护。
在JavaScript中,使用函数前,必须用function关键字来定义函数。
function(参数1,参数2,….,参数n)
{
//函数体语句
}
“指定函数名的函数”是JavaScript中使用最广泛的方法,反而“不指定函数名的函数”用得比较少。
function 函数名(参数1,参数2,….,参数n)
{
//函数体语句
return 表达式;
}
函数可以使用return语句将某个值返回,也可以没有返回值。
参数是可选的,可以不带参数,也可以带多个参数。如果是多个参数的话,参数之间要用英文逗号隔开。
嵌套函数,就是在一个函数的内部定义另外一个函数。不过在内部定义的函数只能在内部调用,如果在外部调用,就会出错。
<script type="text/javascript">
//定义阶乘函数
function fun(a)
{
//嵌套函数定义,计算平方值的函数
function multi (x)
{
return x*x;
}
var m=1;
for(var i=1;i<=multi(a);i++)
{
m=m*i;
}
return m;
}
var sum =fun(2)+fun(3);
document.write(sum);
</script>
上面定义的multi函数只能在fun函数内部使用,如果在fun函数外部调用就会出错
递归函数是一种非常重要的编程技术,当年我在学习其他编程技术(如C、C++、Java等)都经常用到。
递归函数用于让一个函数从其内部调用其本身。不过需要注意的是,如果递归函数处理不当,就会使程序陷入“死循环”。为了防止“死循环”的出现,可以设计一个做自加运算的变量,用于记录函数自身调用的次数,如果次数太多就让它自动退出循环。
function 递归函数名(参数1)
{
递归函数名(参数2)
}
<script type="text/javascript">
var msg="\n函数的递归调用:\n\n";
//响应按钮的点击事件
function Test()
{
var result;
msg+="调用语句:\n";
msg+=" result=sum(20);\n";
msg+="调用步骤:\n";
result=sum(20);
msg+="计算结果:\n";
msg+=" result="+result+"\n";
alert(msg);
}
//计算当前步骤加和值
function sum(m)
{
if(m==0)
{
return 0;
}
else
{
msg+=" result="+m+"+sum("+(m-2)+ ");\n";
result=m+sum(m-2);
}
return result;
}
</script>
<body>
<input type="button" value="测试" onclick="Test()"/>
</body>
在上述代码中,为了求取20以内的偶数和,定义了递归函数sum(m),而函数Test()对其进行调用,并使用alert()方法弹出相应的提示信息。
JavaScript中有2种函数:一种是用户自定义函数,另外一种是JavaScript语言内部已经定义好了,可以直接供我们调用的函数(也就是内置函数)。
内置函数由于已经在JavaScript语言内部定义好了的,也就是我们不需要自己定义就能用了。这样极大方便了我们的编程。
argument是JavaScript中的一个关键字,用于指向调用者传入的所有参数。
function example(x){
alert(x); //1
alert(arguments.length); //3
for(var i=0; i<arguments.length; i++){
alert(arguments[i]); //1,2,3
}
}
example(1,2,3);
即使不定义参数,也可以取到调用者的参数。
function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0
abs(10); // 10
abs(-9); // 9
由于JavaScript函数允许接收任意个参数,所以不得不用arguments来获取函数定义a以外的参数。
function exm(a) {
var rest = [];
if (arguments.length > 1) {
for (var i = 1; i<arguments.length; i++) {
rest.push(arguments[i]);
}
}
}
其实ES6给了新的rest参数,用在函数最后,多余的参数以数组的形式交给变量rest,如果传入的参数未填满函数定义的参数,rest会是一个空数组。
function exm(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
exm(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
exm(1);
// 结果:
// a = 1
// b = undefined
// Array []
<script>
function say() {
console.log('Hello' + arguments[0] + arguments[1]);
console.log(arguments.length);
}
say('World!', 'ByeBye!');
</script>
题目:在页面中添加两个单行文本框,在两个文本框中输入两个数字,使用JavaScript函数比较这两个函数大小,并使用对话框输出最大数。
<script type="text/javascript">
function maxNum()
{
//获取两个文本框的值
var x = document.getElementById("num1").value;
var y = document.getElementById("num2").value;
//强制转换为数值型
x = parseFloat(x);
y = parseFloat(y);
if(x<y)
{
alert("最大数是:"+y);
}
else
{
alert("最大数是:"+x);
}
}
</script>
<body>
第一个数是:<input type="text" id="num1"/><br/>
第二个数是:<input type="text" id="num2"/><br/>
<input type="button" onclick="maxNum()" value="计算"/>
</body>
随便输入两个数字如“50和100”,然后点击“计算”按钮即可输出最大数
document.getElementById()类似于CSS中的id选择器,而document.getElementById("num1").value表示选取id为num1的元素并获取它的值。这个方法经常用到
这里用到了函数调用的其中一个方式“在事件中调用函数”。<input type="button" οnclick="maxNum()"/>表示在按钮点击的时候执行函数maxNum()。
此外,还有一点要注意的是:在定义这个函数的时候定义的函数名是max,然后发现出错了!oh~,其实那是忽略了自己定义的函数名是不能与JavaScript内部定义的函数名相同。
题目:写一个函数,输入一个4位数字,要求使用对话框输出这4个数字字符,但每两个数字之间留一个空格,如输入1992,应输出“1 9 9 2”。
<script type="text/javascript">
function strNum()
{
//获取输入文本框中的值,这里获取的值是一个字符串
var s = document.getElementById("num").value;
var s1="";
for(var i=0;i<4;i++)
{
//如果获取的不是最后一个字符
if(i!=3)
{
s1+=s.charAt(i)+ " ";
}
//如果获取的是最后一个字符
else
{
s1+=s.charAt(i);
}
}
alert(s1);
}
</script>
<body>
输入数字是:<input type="text" id="num"/><br/>
<input type="button" onclick="strNum()" value="提交"/>
</body>
这里再一次用到了document.getElementById(),而字符串操作的charAt()方法在字符串对象这一章
在JavaScript中,eval()函数可以把一个字符串当做一个JavaScript表达式一样去执行它。例如:
eval("document.write('<strong>JavaScript入门教程</strong> ')");
上面语句说白了就是执行“document.write('JavaScript入门教程 ')”,eval()函数用了等于没用一样。这是这种“多此一举”的做法,在实际开发很少用到eval()函数。
在JavaScript中,isFinite()函数用来确定某一个数是否是一个有限数值。
number参数是必选的,可以是任意的数值,例如整型、浮点型数据。
如果该参数为非数字、正无穷数和负无穷数,则返回false;否则的话,返回true。如果是字符串类型的数字,就会自动转化为数字型。
这里的参数可以是任何类型的数据,例如数字型、字符串型、日期时间型等。不过得注意一点,当参数是“字符串类型的数字”,就会自动转换为数字型。
123 //这不是NaN值
"123" //这也不是NaN值,因为“字符串类型的数字”会被自动转换为数字型
在JavaScript中,将字符串型数据转换为数值型数据有parseInt()和parseFloat()这2种方法。其中,parseInt()可以将字符串转换为整型数据;parseFloat()可以将字符串转换为浮点型数据。
parseInt() //将字符串型转换为整型
将字符串型转换为整型,前提是字符串一定要是数值字符串。那什么叫数值字符串呢?“123”、“3.1415”这些只有数字的字符串就是数值字符串,而“hao123”、“360cn”等就不是数值字符串。
escape()函数主要作用就是对字符串进行编码,以便它们能在所有计算机上可读。
unescape()函数和escape()函数是刚好反过来的,escape()函数是编码,unescape()函数是解码。
escape()函数主要作用就是对字符串进行编码,以便它们能在所有计算机上可读。
charString是必选参数,表示要进行编码的字符串或文字。escape()函数返回一个包含charString内容的字符串值(Unicode格式)。除了个别如“*@”之类的符号外,其余所有空格、标点符号以及其他非ASCII字符均可用“%xx”这种形式的编码代替,其中xx等于表示该字符的十六进制数。
<script type="text/javascript">
document.write(escape("hello lvye!"))
</script>
空格符对应的编码是“%20”,感叹号对应的编码是“%21”,因此执行escape("hello lvye!")后结果为“hello%20lvye%21”。
escape()函数和unescape()函数是刚好反过来的,前者是编码,后者是解码。
charString是必选参数,表示要进行解码的字符串。unescape()函数返回指定值的ASCII字符串。与escape()函数相反,unescape()函数返回一个包含charString内容的字符串值,所有以“%xx”十六进制形式编码的字符都用ASCII字符集中等价的字符代替。
举例
<script type="text/javascript">
document.write(unescape("hello%20lvye%21"))
</script>
空格符对应的编码是“%20”,感叹号对应的编码是“%21”,因此执行unescape("hello%20lvye%21")后结果为“hello lvye!”。
//定义基本样式
<style type="text/css">
#txt-input,#txt-output
{
height:60px;
}
</style>
<script type="text/javascript">
//定义加密函数
function encrypt()
{
//获取输入框的值
var str = document.getElementById("txt-input").value;
//将输入框的值加密,并赋给输出框
document.getElementById("txt-ouput").value = escape(str);
}
//定义解密函数
function decrypt()
{
//获取输入框的值
var str = document.getElementById("txt-input").value;
//将输入框的值加密,并赋给输出框
document.getElementById("txt-ouput").value = unescape(str);
}
</script>
<body>
<form>
<textarea id="txt-input" cols="20"></textarea><br />
<input id="btn-encrypt" type="button" value="加密" οnclick="encrypt()"/>
<input id="btn-decrypt" type="button" value="解密" οnclick="decrypt()"/>
<input id="Reset1" type="reset" value="清空" /><br />
<textarea id="txt-ouput" cols="20"></textarea>
</form>
(1)重置按钮的作用域是同一个form标签内部的文本框,这一点请参考“HTML入门教程”中的“按钮button”这一节;
(2)这里再次用到了document.getElementById()这一JavaScript的id选择器,这次打死都要记住这一个语句
字符串,是程序设计中经常使用的一种数据类型,在每一种编程语言中都非常非常的重要。
字符串对象string有很多方法,例如match()方法、search()方法、replace()方法等。
对象都有很多方法或属性,不要求每一种都掌握,但是至少要去看看,这样在以后开发中需要用到的时候,大脑“仅存”的记忆都能提醒要用到哪些知识点,然后我们回来翻翻就行了。
在JavaScript中,对于字符串来说,要掌握的属性就只有一个length属性。可以通过length属性来获取字符串的长度。
length属性很简单,但是在字符串操作中经常要用到,这个一定要记住。
<script type="text/javascript">
var str="I love lvye!";
document.write("字符串长度是:"+str.length);
在JavaScript中,使用match()方法可以从字符串内索引指定的值,或者找到一个或多个正则表达式的匹配。
stringObject.match(字符串) //匹配字符串;
stringObject指的是字符串对象。match()方法类似于indexOf()方法,但是它返回的是指定的值,而不是字符串的位置。
<script type="text/javascript">
var str="Hello World!";
document.write(str.match("world")+"<br/>");
docment.write(str.match("World")+"<br/>");
document.write(str.match("worlld")+"<br/>");
document.write(str.match("world!"));
说白了,match()方法就是用来检索一个字符串是否存在。如果存在的话,返回要检索的字符串;如果不存在的话,返回null。
在JavaScript中,search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
stringObject.search(字符串) //检索字符串;
stringObject指的是字符串对象。search()方法返回的是子字符串的起始位置,如果没有找到任何匹配的子串,则返回-1。
<script type="text/javascript">
var str = "I love lvyestudy!";
document.write(str.search("lvye")+"<br/>");
document.write(str.search("html"));
str.search("lvye")表示检索字符串"I love lvyestudy!"是否存在子字符串"lvye",由于存在,所以返回"lvye"在字符串"I love lvyestudy!"中的起始位置7(字符串索引从0开始)。
str.search("html")表示检索字符串"I love lvyestudy!"是否存在子字符串"html",由于不存在,因此返回-1。
在JavaScript中,可以使用indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
stringObject表示字符串对象。indexOf()方法跟search()方法差不多,跟match()方法类似,不同的是indexOf()方法返回的是字符串的位置,而match()方法返回的是指定的字符串。
<script type="text/javascript">
var str="Hello World!";
document.write(str. indexOf ("world")+"<br/>");
document.write(str. indexOf ("World")+"<br/>");
document.write(str. indexOf ("worlld")+"<br/>");
document.write(str. indexOf ("world!"));
在JavaScript中,replace()方法常常用于在字符串中用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子串。
stringObject.replace(原字符,替换字符)
<script type="text/javascript">
var str ="I love javascript!";
var str_new=str.replace("javascript","lvyestudy");
document.write(str_new);
str.replace("javascript","lvyestudy")表示用"lvyestudy"替换str中的"javascript"。
在JavaScript中,可以使用charAt()方法来获取字符串中的某一个字符。这个方法非常好用,在实际开发中也经常用到。
string.Object表示字符串对象。n是数字,表示字符串中第几个字符。注意,字符串中第一个字符的下标是0,第二个字符的下标是1,以此类推。
<script type="text/javascript">
var str = "Hello lvye!";
document.write(str.charAt(0)+"<br/>");
document.write(str.charAt(4));
在JavaScript中,使用toLowerCase()和toUpperCase()这两种方法来转化字符串的大小写。其中,toLowerCase()方法将大写字符串转换为小写字符串;toUpperCase()将小写字符串转换为大写字符串。
字符串名. toLowerCase() //将大写字符串转换为小写字符串
此外,还有2种大小写转化方法:toLocaleLowerCase()和toLocaleUpperCase()。这两个方法有可能一辈子都用不到,要是别的书籍中看到,可以直接忽略。
<script type="text/javascript">
var str="Hello Wordl!";
document.write("以正常方式显示为:"+str+"<br/>");
document.write("以小写方式显示为:"+str. toLowerCase()+"<br/>");
document.write("以大写方式显示为:"+str. toUpperCase());
在JavaScript中,可以使用concat()方法来连接2个或多个字符串。
字符串1.concat(字符串2,字符串3,…,字符串n);
concat()方法将“字符串2,字符串3,…,字符串n”按照顺序连接到字符串1的尾部,并返回连接后的字符串。
<script type="text/javascript">
var str1="所念皆星河,";
var str2="星河不可及,";
var str3="所爱隔山海";
var str4=str1+str2+str3;
var str5=str1.concat(str2,str3);
document.write(str4+"<br/>");
document.write(str5);
原来连接字符串可以有2种方式,一种是使用concat()方法,另外一种更加简单,使用“+”运算符就可以了。连接字符串别傻乎乎地用concat()方法,直接将字符串相加就可以了。
在javascript中,可以使用localeCompare()方法用本地特定的顺序来比较两个字符串。
<script type="text/javascript">
var str1= "JavaScript";
var str2 = "javascript";
var str3 = str1.localeCompare(str2);
document.write(str3);
在javascript中,可以使用split()方法把一个字符串分割成字符串数组。
分割符可以是一个字符、多个字符或一个正则表达式。分割符并不作为返回数组元素的一部分。
<script type="text/javascript">
var str ="I love lvyestudy!";
var arr=new Array();
arr=str.split(" ");
document.write(arr);
str.split(" ")表示字符串以空格作为分割符,而arr其实就是一个数组。。split()方法虽然简单,但是在实际开发中经常会用到
在JavaScript中,可以使用substring()方法来提取字符串中的某一部分字符串。
开始位置是一个非负的整数,表示从哪个位置开始截取。结束位置也是一个非负的整数,表示在哪里结束截取。
<script type="text/javascript">
var str1="自学JavaScript的道路";
var str2=str1.substring(5,15);
document.write(str2);
在JavaScript中,创建日期对象必须使用“new语句”。使用关键字new新建日期对象时,常用的有2种:
其实创建日期对象不止这2种形式,不过其他的创建方式可以直接忽略,没必要增加记忆负担。
var dt1 = new Date("2015-5-3");
var dt2 = new Date("May 3,2015");
var dt3 = new Date("2015/5/3");
日期对象Date的方法主要分为三大组:setXxx、getXxx和toXxx。
setXxx用于设置时间和日期值;getXxx用于获取时间和日期值;toXxxx主要是将日期转换为指定格式。
方法 | 说明 |
getFullYear() | 返回一个表示年份的4位数字 |
getMonth() | 返回值是0(一月)到11(十二月)之间的一个整数 |
getDate() | 返回值是1~31之间的一个整数 |
getHours() | 返回值是0~23之间的一个整数,来表示小时数 |
getMinutes() | 返回值是0~59之间的一个整数,来表示分钟数 |
getSeconds() | 返回值是0~59之间的一个整数,来表示秒数 |
方法 | 说明 |
setFullYear() | 可以设置年、月、日 |
setMonth() | 可以设置月、日 |
setDate() | 可以设置日数 |
setHours() | 可以设置时、分、秒、毫秒 |
setMinutes() | 可以设置分、秒、毫秒 |
setSeconds() | 可以设置秒、毫秒 |
方法 | 说明 |
toString() | 将日期时间转换为普通字符串 |
toUTCString() | 将日期时间转换为世界时间(UTC)格式的字符串 |
toLocaleString() | 将日期时间转换为本地时间格式的字符串 |