函数 | 数组 | 浏览器对象 | 流程控制 | 常用对象 |
常量 | 事件 | Window | 分支语句 | 数学对象 |
变量 | 常用事件 | Document | 循环语句 | 时间对象 |
关键字 | 数据类型 | Location | 特殊语句 | 字符串对象 |
运算符 | 系统函数 | History | 我的博客 | v512工作室 |
表达式 | 嵌入HTML中 | Navigator |
JavaScript简介:由Netscape公司开发的一种脚本语言,其编写的程序可被嵌入到HTML/XML中并直接在浏览器中解释执行
类似的还有VBScript。实际上Script本身翻译过来可以叫做脚本
所谓脚本或脚本语言是说:使用这种语言所编写的代码通常不独立的存在和运行
而是要嵌入到其它的主体中起到辅助或增强的功能
类似的:JavaScript和VBScript可以被嵌入到微软的ASP动态页面中
此时它们可以选择在客户端浏览器中解释执行,也可以被设置为在服务器端运行
JavaScript功能:①增强页面动态效果
②实现页面(浏览器)与用户之间的实时、动态的交互(JavaWeb程序员学习的重点)
JavaScript特点:脚本语言(Script Language)
解释执行(Interpreted Language):每次运行的时直接从源代码开始转换,转换成目标码的指令再执行
相对于编译型的语言来讲,它的运行效率会低,但能够提供比较好的通用性或跨平台性
基于对象(Object Based):JavaScript不是很纯粹的面向对象,或者说是Java的面向对象的精简版
它引入了对象、属性、方法或者说函数的体系和概念,但是又非常的不彻底
主要是为了兼顾它的简便易用性
比如说我们很少使用JavaScript来定义自己的类型、创建对象,虽然它的语法上也是支持这样做的
事件驱动(Event Driven):用户的操作<比如鼠标点击、移动,键盘敲击>都会触发相应的事件或者说在相应的事件元组件上触发约定好的事件
然后再由系统调用事先关联好的处理代码。这个原理同JavaSE中的GUI事件处理是完全相同的
简单:灵活、简单、易学、易用。而且能够很好的解决常规问题
弱类型(Weakly Typed Language):它的数据类型并没有特别严格的明确性的要求
比如说弱类型的语言变量声明的时候可以不指定它的类型甚至可以不经声明直接使用
看上去比较方便也容易初学者上手,但实际上给编译器和运行环境都加重了负担
因为若变量或数据类型是不确定的,在运行的过程中由赋给它的值来决定,中间还可以自由的转换
实际上不利于它空间的分配回收以及在这个数据上可以进行何种运算的合法性检查
比如说一个变量,我们不知道它是什么类型,
到时候我们到底可不可以在它上面进行加法、乘法、除法的运算
那么其实编译器或者说我们的解释运行环境实现起来是很复杂的
嵌入到HTML页面中
在HTML页面中使用<script>(这是一个HTML标记,就像<body>一样)标记嵌入脚本代码:
<script language="javascript">//或者使用type="text/javascript"
/*Javascript代码*/
</script>
说明:属性名language是约定好的,属性值javascript标明将要嵌入的脚本语言的种类是javascript
类似的也可以设定脚本语言的种类为vbscript,二者语法也非常相似
目前也有另外一个更推荐使用的属性名叫type,属性值为text/javascript。同language属性的作用完全相同
脚本区可以使用它专有的注释/**/(里面可以跨多行)
JavaScript变量名大小写是敏感的,而它的关键字、属性名大小写是不敏感的
JavaScript代码的出现位置
HTML页面主体(<body>元素)(相当于内嵌式样式表,直接出现在元素的位置,直接使用,一次性的工作)
举例:<body><script language="javascript">document.write("Hello,你好!");</script></body>
说明:document.write类似Java语言中的System.out.println
其功能是显示参数数据的值到浏览器的窗体中的当前的位置(跟该段代码出现的先后位置有关)
document是JavaScript的一个内置对象,可以直接使用,write是它的一个成员方法,我们在这里叫做函数
HTML页面头部(<head>元素)(相当于内部样式表)
举例:<head><script language="javascript">document.write("Hello,你好!");</script></head>
说明:普通的<script>代码按照它出现的位置就直接显示了
这里即使是<head>中出现的代码区中的代码,也会运行输出到前面
很显然这种做法并不是很合理
实际上在<head>中的<script>代码通常不是直接写语句做事情
而是定义函数或者定义后文中讲到的相当于Java语言中的方法
将来可以在<body>主体中被调用。这样可以实现页面范围内的代码重用
单独的外部文件中(相当于外部样式表)
<script language="javascript" src="外部脚本文件url"></script>
举例:<body><script language="javascript" src="m3.js"></script></body>
m3.js文件中的内容:document.write("Hello,你好!");
说明:代码区中没有代码。这种元素也可以称为空元素。便于多个页面间的代码重用。
补充:<body>
<script language="javascript">
/*Javascript代码*/
</script>
<script language="javascript">
/*Javascript代码*/
</script>
<script language="javascript">
/*Javascript代码*/
</script>
<body>
代码区可以有多段。实际上所有的代码区均按照它们出现的先后顺序被运行
但是多段代码区跟一段代码区在逻辑上没有什么区别,它们可以认为是一个整体
比如说前面声明的变量,后面也可以用,它的值实际上还是在的
但若重复声明它,浏览器也不会报错
数据类型
各种高级编程语言(脚本语言也勉强算是吧)都有共通的地方
就是基本语法中包括类型、变量、常量、运算符、表达式、流程控制等等都是相通的
JavaScript支持基本数据类型和对象类型(相当于Java语言中的基本数据类型和引用类型)
基本数据类型:整型、浮点型、字符型、布尔型
对象类型:内置对象(String、Math、Date)(这是最主要的三类)
浏览器对象(Window、Document、History、Forms、...)(我们可以认为它们有自己的类型,并且使用的是该类型的一个实例一个对象)
用户自定义对象(我们很少有这种需要,不需要自己定义。通常使用它的内置对象或者浏览器对象就能够满足要求)
说明:①字符型(也可以说包含了我们所习惯的字符串类型。严格来说字符串类型是一个对象类型)
②JavaScript中很少强调类型和对象的关联,因为我们会直接的使用对象,所以也习惯于管它们直接叫做对象
变量
命名规则:必须以字母、下划线("_")、或美圆符("$")开头,后面可以跟字母、下划线、美圆符和数字
变量名区分大小写(Case-Sensitive)(这里指的是变量的名字,不是关键字。比如说A、a是不同的)
不允许使用JavaScript关键字做变量名
说明:可以简单说这里的字母就是指26个英文字母的大小写,实际上也可以采用汉语的字符,但是我们没必要搞的那么复杂
JavaScript为弱类型语言,变量声明时不指定数据类型,其具体数据类型由给其所赋的值决定
通常使用var声明变量,也可以不经声明而直接使用变量。但必须是先赋值,再取用其值
假设在JavaScript中有这样一段代码:var b;document.write(b);即只声明b而没有赋值,那么就会输出undefined
这里的undefined并不是指它没被定义过,只是说它没有被赋值而已
举例:var a;//注意A和a是不同的
var b=3.14;//声明变量的同时赋值,此时b的值是浮点型的3.14,那么此时b这个变量就是浮点型,b可以做四则运算
var c="Hello,你好";//同理,此时c是一个字符串
var d=5,e=6;//其实使用var声明变量是跟VB学来的或者说差不多的这种语法
b = c + d;//实际上实现了字符串常量和整型数值之间的连接的操作
//其结果就是Hello,你好5,那么还是一个字符串。把它赋值给b,这时b又变成了字符串类型的数据
//这种做法在Java、C、C++等强类型的语言中是难以想象的,但在这种脚本语言中确实比较方便
//我们也很难指望它们来实现非常严谨的、体系庞大的编程的任务,但是简介的任务用它们都还比较顺手
f="Welcome to JavaScript";//注意此处没有声明f的类型,变量未经声明,直接使用
document.write(b);//打印输出b,即输出Hello,你好5
document.write("<br>");//换行
document.write(f);//显示输出f的内容到浏览器的窗体中
关键字(编程语言中,一些被赋以特定的含义、并用做专门用途的单词称为关键字(Keyword)或保留字(Reserved Word))
实际上我们可以形成这样一种规律性的认识:各种高级编程语言的关键字都大同小异,
比如用来声明数据类型、标明循环、流程控制、布尔型、常量等等
编程时尽量避开使用这些可能引起混淆的或与关键字发生冲突的标识符
就是我们的变量名、方法名或者叫函数名都不要起这类的名字
JavaScript关键字列表
break | delete | function | return | typeof |
case | do | if | switch | var |
catch | else | in | this | void |
continue | false | instanceof | throw | while |
debugger | finally | new | true | with |
default | for | null | try |
常量
整型常量:十进制表示:3,200
十六进制表示:0x12,0X4a(这里是零X,不是欧X)
八进制表示:012,027(这里开头也是零,不是欧)
浮点型常量:3.14,2.1e3,2e4
布尔型常量:true,false
字符型常量:'a',"china",'abc':单引号引起来的单个字符。双引号引起来的零到多个字符
但JavaScript有一种我们Java程序员很难接受的做法:就是它允许用单引号引起来多个字符
其实也是一个字符型常量
我们还是习惯于用双引号好了
转义字符常量:"\n","\t","\""(\n是换行。\t是输出一个制表键,缩进一个制表位,相当于四个空格。\"是输出一个双引号)
空值常量:null
举例:var a2 = 0x12;(声明十六进制的a2并赋值)
var a3 = 012;(下面是输出a2和a3)
document.write("<br>0x12->" + a2)(显示时它们的值会自动转换成十进制,这是为了符合人们的日常习惯)
document.write("<br>012->" + a3);(各种高级编程语言在数据显示的时候都进行了类似的处理)
运算符(跟Java语言基本相同,实际上各种高级编程语言都是类似的)
算数运算符
|
|
逻辑运算符
|
|
比较运算符
|
|
扩展赋值运算符
|
|
位运算符
|
|
其他
|
||||||
+
|
加法 |
!
|
逻辑"非" |
>
|
大于 |
+=
|
a+=b<=>a=a+b; |
~
|
按位"取反" |
=
|
赋值运算符 | |||||
-
|
减法 |
&
|
逻辑"与" |
>=
|
大于或等于 |
-=
|
&
|
按位"与" |
?:
|
三目运算符 | ||||||
*
|
乘法 |
|
|
逻辑"或" |
<
|
小于 |
*=
|
|
|
按位"或" |
+、+=
|
字符串连接符 | ||||||
/
|
除法 |
^
|
逻辑"异或" |
<=
|
小于或等于 |
/=
|
^
|
按位"异或" | ||||||||
++
|
增量/单目加 |
!=
|
不等于 |
%=
|
<<
|
左移 | ||||||||||
--
|
减量/单目减 |
==
|
相等 |
!=、&=、|=、^=
|
>>
|
带符号右移 | ||||||||||
%
|
取余/求模 |
===
|
全相等 |
<<=、>>=、>>>=
|
>>>
|
无符号右移 |
表达式(符合一定语法规则的运算符和操作数的序列)
表达式的类型和值:对表达式中操作数进行运算得到的结果称为表达式的值
表达式的值的数据类型即为表达式的类型
表达式的运算顺序:首先应按照运算符的优先级从高到低的顺序进行
优先级相同的运算符按照事先约定的结合方向进行(通常是从左到右)
var s1=3+5+"hello";//对于复杂的表达式,建议使用小括号显式的标明运算次序,增强代码可读性
document.write(s1);//输出结果:8hello
var s2="hello"+3+5;
document.write(s2);//输出结果:hello35
程序流程控制(简单的说,跟Java语言基本相同,只是有个别的差异之处)
分支语句:if-else分支语句
举例:<script language="JavaScript">
var sex = window.prompt("请输入您的性别(男/女)","");//说明①
if(sex == "男"){//说明②
document.write("先生您好!");
}else if(sex == "女"){
document.write("女士您好!");
}else{document.write("输入有误!");}</script>
说明①:有点类似于document.write。浏览器对象window代表当前窗体。
prompt是一个函数,window对象的一个方法,其功能是弹出来一个文本输入框
"请输入您的性别(男/女)"是它的提示性的文字,逗号后面的""是它缺省的初值
在这里我们不想设一个默认的初值(男/女),所以给它一个空的字符串
说明②:这一点跟Java语言不同,JavaScript没有equals方法专门来判断字符串的等价性
那么比较数据是否等价,只是使用==号而已,比较的就是它们的值
switch分支语句
举例:<script language="JavaScript">
var month = window.prompt("请输入月份(1~12)","");//说明①
document.write(month);//说明②
var total = 0;
switch(month){
case "1": case "3": case "5": case "7": case "8": case "10": case "12":total = 31;
break;//说明③
case "4": case "6": case "9": case "11": total = 30; break;
case "2":
var year = window.prompt("2月份的天数与年份有关,请继续输入年份","2008");
if((year%4 == 0 && year%100!=0) || year%400 == 0)
total = 29;
else
total = 28; break;
default://说明④
total = -1;
}document.write("月份总天数为:" + total); </script>
说明①:month接收到的是字符串,这跟一些Java初学者喜欢使用Swing组件来接收键盘输入的这种不伦不类的做法是很类似的
说明②:这里的month实际上是一个字符串,Java语言中的switch表达式只接收int或者是整型的兼容类型,不接收String型
但JavaScript可以在switch中接收字符串
说明③:终止switch代码块的运行转而执行后面的代码
说明④:若有人输入57这种不合理的月份,就让total=-1。事实上default也可去掉,然后在定义时让total=-1,这样逻辑上是相同的
循环语句:for循环
补充:for(i=1,i<=10,i++){}:这里的i在for之前的代码中没有声明过
在这里加个var声明一下(即for(var i=1,i<=10,i++){})是可以的,那么不加var也是可以的
while循环
do-while循环
for-in循环
举例:<script language="JavaScript">
var sum = 0; var i = 0; document.write("<hr>for-in循环:" ); document.write("<ul>");
var a = new Array(3);//说明①
a[0] = "苹果"; a[1] = "香蕉"; a[2] = "杨桃";
for(var s in a){//说明②
document.write("<li>" + a[s] + "</li>");} document.write("</ul>");</script>
说明①:这是JavaScript中声明数组语法格式的三种方法中比较常用的一种
里面的三个元素此时没有赋值,那么就不可使用它,所以才会在下一行中对它们赋值
说明②:var s确实是一个中间变量。in a在数组a中。在接下来的循环体中,s相当于一个循环的下标
s实际上是字符串形式的0、1、2(还不是int型)。但具体循环几次,系统会自动检测数组有多少个元素,那它就循环几次
a[s]中s是中间变量,这一点跟Java的for-each循环就不同了
for-each里面s做为记录了当前元素的一个变量。而for-in里的这个s还相当于一个下标
补充①:for-in循环类似于Java语言中从jdk1.5开始引入的for-each增强型循环,但实际上两者是不同的
它能够用来遍历数组,我们说它是JavaScript数组中的元素
或者也可以遍历JavaScript中对象的属性,它能遍历对象所有的属性
补充②:其实也可以使用传统的for循环来遍历a数组的,我们在下面数组的部分也会有演示
特殊流程控制语句:break语句
举例:for(i=1; i<=10; i++){if(i%3 == 0)
break;//说明
document.write("<br>" + i);}
说明:如果i能被3整除的话,就执行break语句
这就意味着一旦遇到能被3整除的数将终止当前循环,后面的循环不做了。所以它只能输出1,2
continue语句
举例:for(i=1; i<=10; i++){
if(i%3 == 0)
continue;//说明
document.write("<br>" + i);}
说明:如果i能被3整除的话,跳过本次循环或者说是提前结束本次循环开始下一次循环,跳转到i++的位置
也就是说每次遇到3的整数倍的i值时,将continue。就是跳过循环体中后面还没有执行的语句开始下一次循环,转到i++
所以它的输出结果就是:1、2、4、5、7、8、10
数组(多个相同类型数据的组合,实现对这些数据的统一管理)
实际上Java语言中的数组是松散的,也可以是不同类型的数据
JavaScript数组声明方式:var a1=new Array();//里面包含零个元素,长度为零
//我们可以认为这就是Java语言中new调用构造方法或者Java语言的声明数组(new+类型+方括号)
var a2=new Array(size);//这里创建的数组规定了它的长度(即整型参数size)
var a3=new Array(v1,v2,...vn);//相当于静态初始化。后面的多个参数即给出了数组中每一个元素的值
//这并不是指定了一个多维数组,而是指定了一个一维数组里面包含的具体元素
//v1--vn中数字1--n是下标
JavaScript数组长度可变,数组对象的自动属性length标明了其长度:也就是说,我们可以声明一个数组,长度为3,但是我们可以往里面加入5个或更多的元素
当然必须先赋值后使用,那么它的长度会自动调整
若我们使用了一个声明过的变量,但没有赋过值,通常会输出undefined
数组元素访问格式为:数组名[元素下标],有效元素下标为0~length-1
举例:<script language="JavaScript">
var a1 = new Array(2);//此处故意声明该数组长度为2
a1[0] = "中国";//但是我们用的时候却往里面加入了4个元素,下标分别为0、1、2、4
a1[1] = "法国";//按理说最后一个元素下标应该为3,可是我们故意跳跃性的使用4
a1[2] = "美国";//它的长度已经被自动撑大了,变为5个长度,可用下标是0到4
a1[4] = "德国";//但是第四个数没有赋值,所以显示输出的时候变成了undefined(未赋值)
for(var i=0;i<a1.length;i++){document.write(a1[i] + "<br>");}
var a2 = new Array(3,40,52,66,77);
for(var i=0;i<a2.length;i++){document.write(a2[i] + "<br>");}</script>
函数(Function)※(重点)※
JavaScript中的函数相当于其他编程语言中的方法(Method)或子程序(Subroutine),是用来完成相对独立功能的一段代码的集合
定义格式:function<函数名>(<形式参数列表>){
<函数体代码>
[<return语句>]
}
补充:我们给它起个名字就叫方法名或者函数名
它需要处理数据或者它运行的时候需要外界提供给它数据,我们就可以规定它的形参列表
那么它运行之后可能有结果,我们就可以给它返回值
JavaScript函数在定义时不需要指定其返回值类型和是否有返回值
补充:因为本来我们就对类型没有什么强制性的约定或要求
那么甚至我们也不在乎或者说不必须事先标明它是不是又返回值
最后呢想返回就返回,没有值就不返回
举例:<head><script language="JavaScript">//<script>出现在<head>中说明①
function showArray(a){//说明②
document.write("<hr>数组遍历结果:<ul>");
for(var i=0;i<a.length;i++){document.write("<li>" + a[i] + "</li>");}
document.write("</ul>");}
function max(m,n){if(m>n) return m;else return n;}
</script></head>
<body><script language="JavaScript">
var a1 = new Array(3);
a1[0] = "中国";a1[1] = "法国";a1[2] = "美国";showArray(a1);//说明③
var a2 = new Array(3,40,52);showArray(a2);
document.write("<hr>");var a=33,b=44;var result = max(a,b);//说明④
document.write("最大值为:" + result);
</script></body>
说明①:如果是在文件头部<head>区域中使用<script>标记,通常应该定义的是函数
函数本身不会运行,将来在代码区中通过函数名调用它,那么这个函数才能运行
说明②:function相当于Java中方法前面的修饰符(public static void main)
这里面是显式的说明我们要定义一个函数
showArray是函数名,a是形参列表,形参也不需要指定类型
说明③:直接调用showArray()函数
上面定义的函数可以认为它不属于任何Java语言中的类型或者说是对象
它只属于当前的文档,在当前文档的范围内可以被访问
说明④:注意这个max方法是有返回值的
实际上其他的函数或者叫方法尾部也有这种隐含的return语句,那么确实看起来很自由
函数声明的时候根本不需要指明它有没有返回值,我们可以再里面随便返回最后的值或者不返回
也不需要指定返回值的类型。我们在这里就直接接收它的返回值打印输出
那么我们就可以定义自己的函数来进行表单参数的格式验证或者实现其他更复杂的动态逻辑
事件及事件处理机制
事件(Event):用于描述发生什么事情,用户的鼠标或键盘操作(如点击、文字输入、选中条目等)
以及其他的页面操作(如页面加载和卸载等)都会触发相应的事件
补充:HTML页面在浏览器中显示的时候,首先要加载到浏览器的内存中,然后再解析它,这个过程叫加载
当我们跳到另外一个页面或者关闭浏览器的时候会卸载当前的页面。我们称之为load或者unload
事件源(Event Source):可能产生事件的组件,通常为表单组件。实际上在JavaScript中一般不太强调事件源的概念
事件驱动(Event Driven):由事件引发程序的响应,执行事先准备好的事件处理代码这种程序运行方式称为事件驱动
补充:实际上现在的高级编程语言都是采用事件驱动的方式
比如说鼠标点击、键盘输入都会触发程序中的处理代码。因为它比较便捷
事件处理代码(Event Handle):JavaScript中事件处理代码通常定义为函数的形式
其中加入所需的处理逻辑,并将之关联到所关注的事件源组件上
补充:也会指定它是针对哪一种事件才会触发。这一点特别像Java语言的注册监听器
常用事件类型:
事件类型
|
事件描述(触发事件的时机)
|
onClick | 组件被点击 |
onDbclick | 组件被双击 |
onLoad | 页面装载 |
onUnload | 页面卸载 |
onChange | 组件内容或条目选中状态被改变 |
onMouesemove | 鼠标移动 |
onFocus | 当组件获得焦点 |
onBlur | 当对象失去焦点 |
常用对象
需要说明的是:做为一种基于对象的脚本语言(注意这个语言很自觉地没有管自己叫面向对象)
JavaScript确实也允许使用着定义自己的对象
其实就相当于我们定义自己的类型,再创建该类的对象
而且还可以使用构造函数之类的,因为比较繁琐,也很少有人真的会这样用
那么我们通常用的就是它的几个常用的内置对象和浏览器对象,也都是内嵌对象
常用对象有三种:数学对象、时间对象和字符串对象
数学对象(内置对象Math提供常规的数学运算方法和数学常量)(跟Java中的Math类差不多)
PI、E、abs()、sin()、cos()、...、round()、sqrt()、pow()、random()
举例:<script language="JavaScript">
var d = Math.random();//说明
document.write(d); document.write("<br>");
document.write(Math.PI); document.write("<br>");
document.write(Math.E); document.write("<br>");
document.write(Math.pow(2,4)); document.write("<br>");
document.write(Math.sqrt(100)); document.write("<br>");</script>
说明:首先声明一个变量d,然后调用了Math.random()。调用了数学对象的random()方法
我们可以把Math叫做对象,甚至可以把它理解成相当于Java语言中的一个类调用了它的一个static方法
但在JavaScript中我们说:我们使用了一个Math对象(或者说这是一个静态对象)调用了一个它的方法
实际上它的本质我们是理解的
输出:0.3902098394838459(随机出现的)、3.141592653589793、2.718281828459045、16、10
时间对象(封装日期和时间信息并提供相关操作功能)(特别类似于Java语言中的Date()类的对象)
使用前需要声明/创建对象:var currentTime=new Date();
Date对象跟Math对象不同,使用前需要声明/创建对象
因为不同的时刻是由不同的Date对象来描述的
而Math对象只要有一个就够了,相当于里面都是静态方法
常用方法:
getYear() | setYear() |
getMonth() | setMonth() |
getDate() | setDate() |
getDay() | |
getHours() | setHours() |
getMinutes() | setMinutes() |
getSeconds() | setSeconds() |
getTime() | setTime() |
系统函数(不是面向对象的语言所应该有的)
系统函数不隶属于任何类或者说任何对象,可以在JavaScript代码中的任何位置直接使用
常用系统函数:eval(str):计算字符串形式给出的表达式的值
parseInt(str):将字符串形式的数值解析为整数(缺省为解析为十进制整数)
如果解析到字符串中间遇到非法字符则返回已解析的内容,而不是出错,这点其实很害人,并不是很好
如果字符串的开头第一位即为非法字符(如:"K"、"中"),则返回NaN(Not a number,非数值型)
相当于Java中Integer类的parseInt(),但是这个方法更健壮
parseInt(str,radix):按照指定的进制解析字符串。parseInt()要求字符串是数值型
parseFloat(str):将字符串形式的数值解析为浮点数。要求字符串本身是数字和小数点组成的一个浮点值
isNaN(v):判断参数的值是否为NaN
举例:eval("3+5*2")//值为13
parseInt("21")//值为21
parseInt("21",8)//声明该字符串内的值为八进制数,输出时自动解析为十进制,故值为17
parseInt("021")//字符串本身也可以表明它的进制。零开头的是八进制,缺省的就会按八进制转换。故值为17
parseInt("0x21")//零X开头的位十六进制。故值为33
parseInt("456a")//值为456(这种做法对我们意义不大,因为它含有欺骗性)
parseInt("a123")//值为NaN(可以认为NaN是个常量,它并不是说NaN代表不是数值型的数据,可以理解成它根本就不是数值,不是数据)
isNaN(123)//值为false
isNaN(parseInt("a123"))//值为true
浏览器对象(属于JavaScript内置对象,使用这些对象可以实现与HTML页面间的交互)
主要浏览器对象层次:(红色背景的是最常用到的)
Navigator | Links | |||
Location | ||||
History | Anchors | |||
Window—→ | Document | —→ | Forms | Form Elements |
Event | Images | |||
...... | ...... | |||
...... | ...... |