JavaScript基础A
JavaScript组成
ECMA : 全称ECMAScript,解释器、计算机语言的翻译
DOM:全称Document Object Model,赋予了JS操作HTML的能力,例如获取一个元素的时候就是用,document来操作的.
BOM:全称Browser Object Model,浏览器对象模型,操作浏览器本身,在JS里面也有一个专门的对象,就是windows.比如弹出窗口,复制到剪贴板这些,浏览器操作的事件叫做BOM操作.
各组成部分的兼容性,兼容性问题由来
ECMA 几乎没有兼容性问题
DOM 有一些操作不兼容
BOM 没有兼容问题(完全不兼容)一般不用.
变量类型(1)
可以把变量想象成一个用来存东西的一个盒子.
JS中,变量本身没有类型,变量的类型取决于它里面存的东西,如果存放的是数字,它就是数字变量,如果存放的是字符串,它就是字符串变量
类型:typeof运算符(用来判断一个变量的类型)
用法:返回值
1
2
|
var
a=12;
alert(
typeof
a);
|
6种常见类型
number数字类型、string字符串类型、boolean布尔类型、undefined未定义、object对象类型、function函数类型.
number数字类型
1
2
|
var
a=12;
//定义了一个变量a,a里面存放了一个12
alert(
typeof
a);
//返回unmber数字类型
|
string字符串类型
1
2
|
a=
"sadwgwega"
;
alert(
typeof
a);
//返回string字符串类型
|
boolean布尔类型
1
2
|
a=
true
;
alert(
typeof
a);
//返回boolean布尔类型,只有两种情况一个true真一个false假
|
undefined未定义
1
2
3
|
var
b;
//定义了b为变量,但没有给它赋值变量值,b是空的,没存放东西
alert(
typeof
b);
//返回undefined未定义的类型
//undefined在两种情况下出现,1真的没定义.2虽然定义了变量当没有给它赋值变量值比如现在的b.
|
object对象类型
1
2
|
a=document;
alert(
typeof
a);
//返回object对象类型
|
function函数类型.
1
2
3
4
5
|
a=
function
()
{
alert(
"abca"
);
};
alert(
typeof
a);
//返回function函数类型
|
建议:一个变量应该只存放一种类型的数据
变量类型(2)
数据类型转换
例子:计算两个文本框输入数字的和
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<script>
window.onload=
function
()
{
var
oTxt1=document.getElementById(
'txt1'
);
//通过id提取txt1文本框
var
oTxt2=document.getElementById(
'txt2'
);
//通过id提取txt1文本框
var
oBtn=document.getElementById(
'btn1'
);
//通过id提取btn1按钮
oBtn.onclick=
function
()
//为按钮添加鼠标点击事件
{
// alert(oTxt1.value+oTxt2.value); //这两个文本框输入的内容就算是数字,JS也会默认把它认为是字符串,所以最终弹出结果将是两个字符串相连接,例如输入12和56结果为1256
alert(parseInt(oTxt1.value)+parseInt(oTxt2.value));
//解决方法,把文本框1和2输入的内容用parseInt( )转换为数字.这样弹出结果将为两个文本框内输入数字相加的总和.
};
};
</script>
<body>
<input id=
"txt1"
type=
"text"
/>
<input id=
"txt2"
type=
"text"
/>
<input id=
"btn1"
type=
"button"
value=
"求和"
/>
</body>
|
显式类型转换(强制类型转换)
parseInt( ) 用来把字符串转换成数字
1
2
|
var
a=
"12"
;
alert(parseInt(a)+1);
//将字符串12转换成数字12后+1,弹出结果为13
|
parseInt( ) 的特性
parseInt( ) 是从左到右去扫描字符串,一旦发现一个不是数字的东西,就会跳出去,比如下例中的12px,因为px不是数字,它就会跳出去,只读取前面找到的12,换句话说,它可以把字符串里面的数字提取出来.
1
2
|
var
a=
"12px"
;
alert(parseInt(a));
//弹出结果为12
|
由于parseInt( )的工作原理是从左到右,一旦看到非数字的东西就自动跳出,所以下例中px后面的34它也是不会读取的.只会读取前面第一个数字,12
1
2
|
var
a=
"12px34"
;
alert(parseInt(a));
//弹出结果为12
|
当字符串里没有数字全部是字符时例如下例
1
2
|
var
a=
"abc"
;
alert(parseInt(a));
//弹出结果为NaN
|
NaN,是Not a Number 的简写,意思为:非数字.
如何判断parseInt()出来的结果是否为NaN非数字
不能使用==来进行判断如下例:
1
2
3
4
|
var
a=parseInt(
"abc"
);
var
a=parseInt(
"bef"
);
alert(a==b);
//判断a和b是否相等,弹出结果为false假,因为在JS中NaN和NaN是不相等的,
|
可以用isNaN()函数来判断,它的作用就是判断一个东西是否为NaN,如下例:
1
2
|
var
a=parseInt(
"abc"
);
alert(isNaN(a));
//弹出结果为true真,是一个NaN
|
扩展:在计算两个文本框输入数字的和的例子中,如果在文本框内输入12+abc的话,弹出的结果将为NaN,相当于,让12和NaN去相加,实际上,任何数和NaN相加,结果都将是NaN.
例子,文本框求和程序中加入判断输入是否为数字的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<script>
window.onload=
function
()
{
var
oTxt1=document.getElementById(
'txt1'
);
//通过id提取txt1文本框
var
oTxt2=document.getElementById(
'txt2'
);
//通过id提取txt1文本框
var
oBtn=document.getElementById(
'btn1'
);
//通过id提取btn1按钮
oBtn.onclick=
function
()
//为按钮添加鼠标点击事件
{
var
n1=parseInt(oTxt1.value);
//检测第一个输入框输入内容
var
n2=parseInt(oTxt2.value);
//检测第二个输入框输入内容
//用if判断,用户输入是否为数字,如果是数字,则弹出两个输入框内数字的和
if
(isNaN(n1))
//判断n1如果是一个NaN的话
{
alert(
'你输入的第一个数字有误'
);
}
else
if
(isNaN(n2))
//判断n2如果是一个NaN的话
{
alert(
'你输入的第二个数字有误'
);
}
else
{
//如果n1和n2都正确
alert(n1+n2);
//弹出n1+n2的和
}
};
};
</script>
<body>
<input id=
"txt1"
type=
"text"
/>
<input id=
"txt2"
type=
"text"
/>
<input id=
"btn1"
type=
"button"
value=
"求和"
/>
</body>
|
parseInt( )只能转换整数
1
2
|
var
a=
"3.5"
;
alert(parseInt(a));
//弹出结果为3因为parseInt()只能转换整数,所以它会忽略整数后面的.5
|
parseFloat( )可以转换小数
1
2
|
var
a=
"3.5"
;
alert(parseFloat(a));
//弹出结果为3.5
|
parseInt()、 parseFloat() 两者作用是一样的,没有区别,如果在要转换一个数字是,不知道它是整数或者小数可以直接使用parseFloat(),因为它即可转换整数也可以转换小数.
隐士类型转换
==、===和减法
1
2
3
4
|
var
a=5;
//数字5
var
b=
"5"
;
// 字符串5
alert(a==b);
//比较后弹出true真,因为它们先被系统默认转换为相同的类型然后再来比较所以得出true真的结果.双等号是先转换类型,然后比较
alert(a===b);
//弹出结果false假,三等号,不转换类型,直接比较,a是数字型b是字符串型两者不相等,所以结果为false假
|
+号在JS里的两种功能,1字符串连接,2数字相加,只使用一个加号的时候系统是不会进行隐式转换的.-号在JS里只有一个功能,就是数字相减,所以当使用减号时会进行隐式转换.
1
2
3
|
var
a=
"12"
;
//字符串12
var
b=
"5"
;
//字符串5
alert(a+b);
//弹出结果125,字符串与字符串相连
|
1
2
3
|
var
a=
"12"
;
//字符串12
var
b=
"5"
;
//字符串5
alert(a-b);
//弹出结果7,因为系统默认先把a和b都转换成了数字类型然后才进行相减,所以-号也是一个隐式类型转换
|
变量作用域(作用范围):局部,全局
1
2
3
4
5
6
7
8
9
10
11
|
出错无结果弹出
function
aaa ()
{
var
a=12;
//局部变量:只能在定义它的函数里面使用
};
function
bbb ()
{
alert(a);
};
aaa ();
bbb ();
|
1
2
3
4
5
6
7
8
9
10
11
12
|
弹出结果12
var
a;
//在所有函数外面声明的,这就是全局变量:在所有地方都可以用
function
aaa()
{
a=12;
};
function
bbb ()
{
alert(a);
};
aaa ();
bbb ();
|
什么是闭包
1
2
3
4
5
6
7
8
9
10
11
12
|
子函数可以使用父函数中的局部变量就叫闭包
function
aaa ()
//父函数
{
var
a=12;
//局部变量:只能在定义它的函数里面使用
function
bbb ()
//子函数
{
alert(a);
};
bbb ();
};
aaa ();
|
命名规范
类型前缀 , 首字母大写
例如:oTxt存的是一个对象类型, aDiv 存的是一个数组类型,让别人一看就知道里面存的是什么类型.
类型前缀在给变量取名时使用,函数取名时,只要使用首字母大写就可以了.
类型 | 前缀 | 类型 | 实例 |
数组 | a | Array | aItems |
布尔值 | b | Boolean | bIsComplete |
浮点数 | f | Float | fPrice |
函数 | fn | Function | fnHandler |
整数 | i | Integer | iItemCount |
对象 | o | Object | oDiv1 |
正则表达式 | re | RegExp | reEmailCheck |
字符串 | s | String | sUserName |
变体变量 | v | Variant | vAnything |