安利学习网站 http://how2j.cn/
简要介绍
JavaScript必须放在script标签中。标签可以放在HTML的任何地方,一般放在head标签里。
如果有多段script代码,会按照从上到下的顺序依次执行。
JavaScript同css一样,可以从HTML中剥离出来,形成一个单独的文件,在HTML中引用即可。
注释
//单行注释
/*
多行注释
*/
变量
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var
申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var
申明就被使用,那么该变量就自动被申明为全局变量:
//使用var
var x = 10;
document.write("变量x的值:"+x);
//不使用var
x = 10;
document.write("没有声明var变量x的值:"+x);
//变量命名规则和java相似
//开头可以用 _$和字母 ,其他部分可以用 $ _ 字母或者数字
<script>
var b=012;//第一位是0,表示八进制
var c=0xA;//0x开头表示十六进制
var d=3.14;//有小数点表示浮点数
var e=3.14e2;//使用e的幂表示科学计数法
document.write("十进制 10 的值: "+a);
document.write("<br>");
document.write("八进制 012 的值: "+b);
document.write("<br>");
document.write("十六进制 0xA 的值: "+c);
document.write("<br>");
document.write("浮点数 3.14 的值: "+d);
document.write("<br>");
document.write("科学记数法 3.14e2 的值: "+e);
document.write("<br>");
//与java不同的是,javascript中没有字符的概念,只有字符串,所以单引号和双引号,都用来表示字符串。
var x='hello '; //单引号
var y="javascript"; //双引号,打印出来一样的效果
</script>
调试方法
1.alert(1),会弹出对话框,内容为alert内容(类似于print进行检测)
2.利用浏览器调试
这里准备了一段故意写错的javascript代码。 点击快捷键F12,就会出现console页面。 console是控制台的意思,用于输出一些错误和调试信息。 注意: 虽然这段javascript代码有错误,但是第一次F12是看不到错误的,因为错误已经发生了,才打开了F12。 所以打开了F12之后,使用快捷键F5刷新一下当前页面,就可以看到控制台报出了错误的原因 document.write1 is not a function 这样定位问题就非常方便了 。【console里会出现:TypeError】
此外还有console.log()等方法,可以进行学习浏览器控制台方法。
3.try_catch
<script>
function f1(){
//函数f1是存在的
}
try{
document.write("试图调用不存在的函数f2()<br>");
f2(); //调用不存在的函数f2();
}
catch(err){//注意这里用的是error
document.write("捕捉到错误产生:");
document.write(err.message);
}
document.write("<p>因为错误被捕捉了,所以后续的代码能够继续执行</p>");
</script>
类型转换
介绍&转字符串
<script>
var a="hello javascript";
document.write("变量a的类型是:"+(typeof a));//NOTICE
document.write("<br>");
document.write("变量a的长度是:"+a.length);
</script>
利用toString转换为字符串类型
String()和toString()一样都会返回字符串,区别在于对null的处理
String()会返回字符串"null"
toString() 就会报错,无法执行
<script>
var a=10;
document.write("数字 "+a+" 转换为字符串"+a.toString());
document.write("<br>");
var b=true;
document.write("布尔 "+b+" 转换为字符串"+b.toString());
document.write("<br>");
var c="hello javascript";
document.write("字符串 "+c+" 转换为字符串 "+c.toString());
document.write("<br>");
</script>
数字转字符串有默认模式和基模式两种
<script>
var a=10;
document.write('默认模式下,数字10转换为十进制的'+a.toString()); //默认模式,即十进制
document.write("<br>");
document.write('基模式下,数字10转换为二进制的'+a.toString(2)); //基模式,二进制
document.write("<br>");
document.write('基模式下,数字10转换为八进制的'+a.toString(8)); //基模式,八进制
document.write("<br>");
document.write('基模式下,数字10转换为十六进制的'+a.toString(16)); //基模式,十六进制
document.write("<br>");
</script>
字符串转数字
字符串转数字,很像java,不过不用对象,直接使用parseInt即可。
Number()和parseInt()一样,都可以用来进行数字的转换 区别在于,当转换的内容包含非数字的时候,Number() 会返回NaN(Not a Number) parseInt() 要看情况,如果以数字开头,就会返回开头的合法数字部分,如果以非数字开头,则返回NaN
<script>
document.write("字符串的\"10\"转换为数字的:"+parseInt("10")); //转换整数
document.write("<br>");
document.write("字符串的\"3.14\"转换为数字的:"+parseFloat("3.14"));//转换浮点数
document.write("<br>");
document.write("字符串的\"10abc\"转换为数字的:"+parseInt("10abc")); //判断每一位,直到发现不是数字的那一位
document.write("<br>");
document.write("字符串的\"hello javascript\"转换为数字的:"+parseInt("hello javascript")); //如果完全不包含数字,则返回NaN - Not a Number
document.write("<br>");
</script>
Boolean
使用内置函数Boolean() 转换为Boolean值 当转换字符串时: 非空即为true 当转换数字时: 非0即为true 当转换对象时: 非null即为true
Boolean(转换对象)
函数
<script>
function print(){
document.write("这一句话是由一个自定义函数打印");
}
print();//函数需要调用
</script>
返回值可有可无,根据需要增加参数和返回值。
事件
事件是javascript允许html与用户交互的行为。 用户任何对网页的操作,都会产生一个事件。 事件有很多种,比如鼠标移动,鼠标点击,键盘点击等等。 本例演示当一个按钮被点击的时候,弹出一个对话框
符号
JavaScript函数、符号等用法和Java相似。+在有字符串时表示字符串的连接。
比较
要特别注意相等运算符==
。JavaScript在设计时,有两种比较运算符:
第一种是==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;(比如数字1==字符‘1’)
第二种是===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false
,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==
比较,始终坚持使用===
比较。
另一个例外是NaN
这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN
的方法是通过isNaN()
函数:
isNaN(NaN); // true
比较float数,不能直接比较。
要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
用的不太熟的java语法
switch (day)
{
case 0:
today="星期天";
break;
case 1:
today="星期一";
break;
case 2:
today="星期二";
break;
case 3:
today="星期三";
break;
case 4:
today="星期四";
break;
case 5:
today="星期五";
break;
case 6:
today="星期六";
break;
}
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
console.log(key); // 'name', 'age', 'city'
}
for循环的一个变体是for ... in循环,它可以把一个对象的所有属性依次循环出来
实验三所得
border-collapse:collapse;<!-- 为表格设置合并边框模型 -->
可用getset方法,在JavaScript中实现得到设置input中的内容
对象
new String() new Number()
进行typeof 检测,得到object
直接 var a="sd" typeof 为string 为number
字符串操作
var x = new String("Hello");
var y = new String("Hello");
var z = new String("aloha");
通过 localeCompare()判断 x和y是否相等 0
通过 localeCompare()判断 x和z是否相等 1
0 表示相等
1 表示字母顺序靠后
-1 表示字母顺序靠前
split 根据分隔符,把字符串转换为数组。
<script>
var x = new String("Hello This Is JavaScript");
document.write( '字符串x的值: '+x);
document.write('<br>');
var y = x.split(" ");
document.write('通过空格分隔split(" "),得到数组'+y);
document.write("<br>");
var z = x.split(" ",2);
document.write('通过空格分隔split(" ",2),得到数组,并且只保留前两个'+z);
</script>
字符串x的值: Hello This Is JavaScript
通过空格分隔split(" "),得到数组Hello,This,Is,JavaScript
通过空格分隔split(" ",2),得到数组,并且只保留前两个Hello,This
replace(search,replacement)
找到满足条件的子字符串search,替换为replacement
注: 默认情况下只替换找到的第一个子字符串,如果要所有都替换,需要写成:
x.replace(/a/g, "o");【a->o】
或者
var regS = new RegExp("a","g");
x.replace(regS, "o");
字符串处理:很多时候需要正则表达式
需要注意的是,所有返回字符串类型的方法,返回的都是基本类型的String
charAt返回的值H 其类型是string concat返回的值Hello JavaScript!!! 其类型是string substring返回的值Hello 其类型是string
数组
- new Array() 创建长度是0的数组
- new Array(5); 创建长度是5的数组,,但是其每一个元素都是undefine
- new Array(3,1,4,1,5,9,2,6); 根据参数创建数组
var x=new Array(2,1,3) 直接打印:2,1,3
for(i in x){
document.write(x[i]);
}
document.write(x.join())得到字符串
document.write(x.join("@"))
x.sort(comparator);【自定义排序方法】
x.sort();
**方法 push pop,分别在最后的位置插入数据和获取数据(获取后删除) 就像先入后出的栈一样 **
**方法 unshift shift ,分别在最开始的位置插入数据和获取数据(获取后删除) **
方法 sort对数组的内容进行排序
方法 reverse,对数组的内容进行反转
<script>
function check(value,a) {
for(i in a){
if(value==a[i])
return true;
}
return false;
}
function removeDul(a) {
var result=new Array();
while(a.length!=0){
var v =a.pop();
if(!check(v,a)){
result.push(v)
}
}
return result;
}
var x=new Array(1,2,4,5,5,2,0);
x=removeDul(x);
x.sort();
</script>
方法 slice 获取子数组
方法 splice (不是 slice) 用于删除数组中的元素 奇葩的是 ,它还能用于向数组中插入元素
方法 concat 连接两个数组
JavaScript的Array
可以包含任意数据类型,并通过索引来访问每个元素。
要取得Array
的长度,直接访问length
属性:
var arr = [1, 2, 3.14, 'Hello', null, true];
arr.length; // 6
请注意,直接给Array
的length
赋一个新的值会导致Array
大小的变化:
日期
[以下除第一个外应该返回的都是数字]
<script>
var d = new Date();
document.write('new Date():'+d);
document.write('分别获取年月日: ');
document.write(d.getFullYear());
document.write("/");
document.write(d.getMonth()+1);
document.write("/");
document.write(d.getDate());
document.write("分别获取时:分:秒:毫秒 ");
document.write(d.getHours());
document.write(":");
document.write(d.getMinutes());
document.write(":");
document.write(d.getSeconds());
document.write(":");
document.write(d.getMilliseconds());
</script>
创建对象的三种操作
1通过new Object()创建一个对象 ‘
<script>
var hero = new Object();
hero.name = "盖伦"; //定义一个属性name,并且赋值
hero.kill = function(){
document.write(hero.name + " 正在杀敌" ); //定义一个函数kill
}
hero.kill(); //调用函数kill
</script>
2.通过new Object创建对象有个问题,就是每创建一个对象,都得重新定义属性和函数。这样代码的重用性不好 那么,采用另一种方式,通过function设计一种对象。 然后实例化它 。 这种思路很像Java里的设计一种类,但是 javascript没有类,只有对象,所以我们叫设计一种对象
<script>
function Hero(name){
this.name = name;
this.kill = function(){
document.write(this.name + "正在杀敌<br>");
}
}
var gareen = new Hero("盖伦");
gareen.kill();
var teemo = new Hero("提莫");
teemo.kill();
</script>
3.现在Hero对象已经设计好了,但是我们发现需要追加一个新的方法keng(),那么就需要通过prototype实现这一点
<script>
function Hero(name){
this.name = name;
this.kill = function(){
document.write(this.name + "正在杀敌<br>");
}
}
var gareen = new Hero("盖伦");
gareen.kill();
var teemo = new Hero("提莫");
teemo.kill();
Hero.prototype.keng = function(){
document.write(this.name + "正在坑队友<br>");
}
gareen.keng();
teemo.keng();
</script>