Java 成神之路 - JavaScript(三)
Java 成神之路 - JavaScript
JavaScript
基本语法
分类
ECMAScript js 基本语法与标准
DOM Document Object Model 文档对象模型
BOM Browser Object Model 浏览器对象模型
tips:DOM 和 BOM 都是一套 API(Application programing interface)
注释方式
style /* */ |
简单指令
alert(""); 提示框; |
变量命名
数字(0-9)、字母(a-z,A-Z)、下划线(_);
tips: 应避免保留字和关键字;
NaN 和 isNaN
isNaN (number), 如果 number 不是数字,则为 true;
Number (number), 在转换为数字类型时,若 number 不是数字,则返回 NaN;
转义字符
\ |
逻辑短路、逻辑中断
true || 6; 逻辑或短路,左边为ture返回右值; |
优先级
* / % |
类型转换(type)
parseInt("12a3"); 转为数字,尝试强转; |
三元表达式
eg : a>b?a=1:a=2; |
数组 Array
(1)、定义法 |
形参和实参
定义函数时,function funcA(a,b,c){},其中的a、b、c即为形参; |
函数 function
(1)、函数命名 |
数据类型
(1)、简单数据类型 |
内置对象
Array、Date、Math、String; |
(Math)数学对象
向上取整 Math.ceil(number); |
(Array)数组对象
(1)、arr1.concat(arr2); |
(Date)日期对象
date.getTime() |
(String)对象
charAt(index) |
自定义对象
对象:无序属性的集合; |
JSON
{ |
JS 解析
(1)、作用域 |
其他细节(tips)
(1)、元素由对象组成的数组进行排序 |
JavaScript 的内部对象
按创建方式不同分为:使用变量声明的隐性对象,使用 new 创建的显性对象
隐性对象
在赋值和声明后就是一个隐性对象,隐性对象不支持 prototype 属性,也无法随意扩展对象属性。
显性对象
显性对象支持 prototype 属性,支持新建对象属性。
JavaScript 提供了十一种内部对象
Boolean 对象
Boolean 对象是一种数据类型,提供构造函数可以创建布尔数据类型的对象
objboolean=new Boolean();
Funcation 对象
JavaScript 函数就是一个 funcation 对象,Funcation 对象是函数,如果函数有参数,这些传入的参数都是 argument 对象
Global 对象
Global 对象不能使用 new 来创建,在脚本语言初始化时会自动创建此对象。
Number 对象
Number 对象,用于创建数值类型的变量
Object 对象
使用 Object 对象创建自定义对象
RegExp 对象
JavaScript 的正则表达式对象
5-2JavaScript 的 string 对象
创建 string 对象
var obj=”javascript”; 或 var obj2=new string (“JavaScript”); 两种方式
string 对象提供了一系列的格式编排方法
####String 对象方法
方法 描述
anchor () 创建 HTML 锚。
big () 用大号字体显示字符串。
blink () 显示闪动字符串。
bold () 使用粗体显示字符串。
fixed () 以打字机文本显示字符串。返回 string 中内容
fontcolor () 使用指定的颜色来显示字符串。
fontsize () 使用指定的尺寸来显示字符串。
fromCharCode () 从字符编码创建一个字符串。
link () 将字符串显示为链接。
italics () 使用斜体显示字符串。
localeCompare () 用本地特定的顺序来比较两个字符串。
slice () 提取字符串的片断,并在新的字符串中返回被提取的部分。
small () 使用小字号来显示字符串。
strike () 使用删除线来显示字符串。
sub () 把字符串显示为下标。
sup () 把字符串显示为上标。
toSource () 代表对象的源代码。
toString () 返回字符串。
valueOf () 返回某个字符串对象的原始值。
<script type ="text/javascript"> |
字符串的长度与大小写
length 属性是用于获取字符串的长度
toLocaleLowerCase () 把字符串转换为小写。
toLocaleUpperCase () 把字符串转换为大写。
toLowerCase () 把字符串转换为小写。
toUpperCase () 把字符串转换为大写。
<script type ="text/javascript"> |
获取字符串的指定字符
charAt (index) 返回在指定位置的字符。
charCodeAt (index) 返回在指定的位置的字符的 Unicode 编码。
<script type ="text/javascript"> |
子字符串的搜索
indexOf (string,index) 检索字符串。返回第一次找到字符串的索引位置,没有找到返回 - 1,传入的 string 是要搜索的参数,index 为要搜索的索引位置
lastIndexOf (string) 从后向前搜索字符串。
match (string) 找到一个或多个正则表达式的匹配。没有找到返回 null
search (string) 检索与正则表达式相匹配的值。
<script type ="text/javascript"> |
子字符串的处理
replace (string1,string2) 替换与正则表达式匹配的子串。将 string1 换成 string2
split () 把字符串分割为字符串数组。返回数组对象。
substr (index,length) 从起始索引号提取字符串中指定数目的字符。从 index 开始取出 length 个字符串
substring (index1,index2) 提取字符串中两个指定的索引号之间的字符。
concat (string) 连接字符串。将 string 字符串添加到 string 对象的字符串之后.
<script type ="text/javascript"> |
将 12/5/2012 变为 2012-5-12;
var obj = “12/5/2012”;
var obj = obj.replace(///g,”-“);
var obj2=obj.replace(/(\d{2})-(\d{1}|\d{2})-(\d{4})/g,’
alert(obj2);
JavaScript 的 Array 对象
JavaScript 数据类型中没有数组,而是使用 Array 对象来创建数组,每一个数组元素事实上就是 Array 对象的属性。
创建一维数组
new Array();
new Array(size);
new Array(element0, element1, …, elementn);
<script type ="text/javascript"> |
Array 对象的属性与方法
length 属性获取数组长度
方法 描述
concat (arry) 连接两个或更多的数组,并返回结果。将参数合并到当前的数组中
join () 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop () 删除并返回数组的最后一个元素
push () 向数组的末尾添加一个或更多元素,并返回新的长度。
shift () 删除并返回数组的第一个元素
slice () 从某个已有的数组返回选定的元素
splice () 删除元素,并向数组添加新元素。
toSource () 返回该对象的源代码。
toString () 把数组转换为字符串,并返回结果。
reverse () 颠倒数组中元素的顺序。sort(arry) 将数组的所有元素排序 **
<script type ="text/javascript"> |
JavaScript 的多维数组
<script type ="text/javascript"> |
JavaScript 的 Date 对象
Date 对象可以获取计算机的系统时间和日期,并且提供相关的方法将它转化为所需的日期数据。
创建 Date 对象
var youDate=new Date()
Date 对象会自动把当前日期和时间保存为其初始值。
Date () 返回当日的日期和时间。
getDate () 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay () 从 Date 对象返回一周中的某一天 (0 ~ 6),也就是星期日到星期六。
getMonth () 从 Date 对象返回月份 (0 ~ 11)。
getFullYear () 从 Date 对象以四位数字返回年份。
getYear () 请使用 getFullYear () 方法代替。
getHours () 返回 Date 对象的小时 (0 ~ 23)。
getMinutes () 返回 Date 对象的分钟 (0 ~ 59)。
getSeconds () 返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds () 返回 Date 对象的毫秒 (0 ~ 999)。
getTime () 返回 1970 年 1 月 1 日至今的毫秒数。
<script type ="text/javascript"> |
设置时间和日期
setDate () 设置 Date 对象中月的某一天 (1 ~ 31)。
setMonth () 设置 Date 对象中月份 (0 ~ 11)。
setFullYear () 设置 Date 对象中的年份(四位数字)。
setYear () 请使用 setFullYear () 方法代替。
setHours () 设置 Date 对象中的小时 (0 ~ 23)。
setMinutes () 设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds () 设置 Date 对象中的秒钟 (0 ~ 59)。
setMilliseconds () 设置 Date 对象中的毫秒 (0 ~ 999)。
setTime () 以毫秒设置 Date 对象。
JavaScript 的 Date 对象可以获取系统时间,只需定时执行 JavaScript 函数就可以建立一个网页时钟,同时需要使用 setTimeout(),参数中可以设置间隔多少时间来执行函数,clearTimeout()可以清除定时器
JavaScript 的 Math 对象
Math 对象不同于其他 JavaScript 对象,Math 对象是由脚本语言引擎所创建的,不需要使用 new 来创建。
max (x,y) 返回 x 和 y 中的最高值。
min (x,y) 返回 x 和 y 中的最低值。
pow (x,y) 返回 x 的 y 次幂。
random () 返回 0 ~ 1 之间的随机数。
需要获得更大的随机数乘以相关的倍数就可以了
<script type ="text/javascript"> |
JavaScript 的 Error 对象
try catch finally 处理例外。
JavaScript 对象的共享属性和方法
属性 constructor 属性可以获取创建对象使用的构造函数的函数名称
tostring()方法和 value()可以显示对象的内容。
js 中的 DOM 操作汇总
一、DOM 创建
DOM 节点(Node)通常对应于一个标签,一个文本,或者一个 HTML 属性。DOM 节点有一个 nodeType
属性用来表示当前元素的类型,它是一个整数:
- Element,元素
- Attribute,属性
- Text,文本
DOM 节点创建最常用的便是 document.createElement 和 document.createTextNode
方法:
var node1 = document.createElement('div'); |
二、DOM 查询
// 返回当前文档中第一个类名为 "myclass" 的元素 |
兼容的获取第一个子元素节点方法:
var first=ele.firstElementChild||ele.children[0];
三、DOM 更改
// 添加、删除子元素 |
四、属性操作
// 获取一个{name, value}的数组 |
innerHTML 与 outerHTML 的区别?
比如对于这样一个 HTML 元素:<div>content<br/></div>
。
innerHTML
:内部 HTML,content<br/>
;outerHTML
:外部 HTML,<div>content<br/></div>
;innerText
:内部文本,content
;outerText
:内部文本,content
;
上述四个属性不仅可以读取,还可以赋值。outerText
和 innerText
的区别在于 outerText
赋值时会把标签一起赋值掉,另外 xxText
赋值时 HTML 特殊字符会被转义。 下图来源于:http://walsh.iteye.com/blog/261966
jQuery 的 html () 与 innerHTML 的区别?
jQuery 的.html()
会调用.innerHTML
来操作,但同时也会 catch
异常,然后用.empty()
, .append()
来重新操作。 这是因为 IE8 中有些元素 (比如 input 等) 的.innerHTML
是只读的。见:http://stackoverflow.com/questions/3563107/jquery-html-vs-innerhtml
引用资料:
http://stackoverflow.com/questions/3563107/jquery-html-vs-innerhtml
http://walsh.iteye.com/blog/261966
http://harttle.com/2015/10/01/javascript-dom-api.html
javascript 中的 BOM
浏览器对象模型 BOM,提供了访问浏览器的接口。这些功能大多和网页内容无关,多年来,由于缺乏规范导致 BOM 中的不同方法在不同浏览器中的实现有所差异,直到 html5,才将 BOM 的主要方面纳入规范。
BOM 常用的特性包括:
一、window 对象
window 对象在浏览器中具有双重角色:它既是 ECMAscript 规定的全局 global 对象,又是 javascript 访问浏览器窗口的一个接口。
- 获取窗口相对于屏幕左上角的位置
//获取窗口相对于屏幕左上角的位置 |
需要注意的一点是,在 IE,opera 中,screenTop 保存的是页面可见区域距离屏幕左侧的距离,而 chrome,firefox,safari 中,screenTop/screenY 保存的则是整个浏览器区域距离屏幕左侧的距离。也就是说,二者差了一个浏览器工具栏的像素高度。
- 移动窗口,调整窗口大小
window.moveTo(0,0) |
注意,这几个方法在浏览器中很可能会被禁用。
- 获得浏览器页面视口的大小
var pageWith=document.documentElement.clientWidth||document.body.clientWidth; |
- 导航和打开窗口
window.open () 既可以导航到特定的 URL,也可以打开一个新的浏览器窗口,其接收四个参数,要加载的 url,窗口目标(可以是关键字_self,_parent,_top,_blank), 一个特性字符串,以及一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值。通常只需要传递第一个参数。
注意,在很多浏览器中,都是阻止弹出窗口的。
- 几个时序相关的函数(原来这是 BOM 的实现,而非 ECMAjavascript 的实现)
setInterval()
setTimeout()
- 系统对话框,这些对话框外观由操作系统 / 浏览器设置决定,css 不起作用,所以很多时候可能需要自定义对话框
alert (): 带有一个确定按钮
confirm ():带有一个确定和取消按钮
prompt (): 显示 OK 和 Cancel 按钮之外,还会显示一个文本输入域
二、location 对象
location 对象提供了当前窗口加载的文档的相关信息,还提供了一些导航功能。事实上,这是一个很特殊的对象,location 既是 window 对象的属性,又是 document 对象的属性。
location.hash #contents 返回url中的hash,如果不包含#后面的内容,则返回空字符串 |
改变浏览器的位置:
location.href=http://www.baidu.com |
三,navigator 对象
这个对象代表浏览器实例,其属性很多,但常用的不太多。如下:
navigator.userAgent://用户代理字符串,用于浏览器监测中、 |
四、history 对象
history 对象保存着用户上网的历史记录,使用 go () 实现在用户的浏览记录中跳转:
history.go(-1) 等价于history.back() |
JS 函数的几种定义方式分析
本文实例讲述了 JS 函数的几种定义方式。分享给大家供大家参考,具体如下:
JS 函数的定义方式比较灵活,它不同于其他的语言,每个函数都是作为一个对象被维护和运行的。
先看几种常用的定义方式:
function func1([参数]){ |
上述
- 第一种方式是最常用的方式,不用多说。
- 第二种是将一匿名函数赋给一个变量,调用方法:func2 ([函数]);
- 第三种是将 func4 赋给变量 func3,调用方法:func3 ([函数]); 或 func4 ([函数]);
- 第四种是声明 func5 为一个对象。
再看看它们的区别:
function func(){ |
但同样是定义函数,在用法上有一定的区别。
<script> |
<script> |
用同样的方法可以去理解第三种定义方式。
第四种定义方式也是需要声明对象后才可以引用。
JS 定义(声明)函数的几种方式
1. 函数式声明
function funName(arg1, arg2) |
特点:此种方式可定义命名的函数变量,而无需给变量赋值,这是一种独立的结构,不能嵌套在非功能模块中。函数名在自身作用域和父作用域内是可获取的(其他域是娶不到的)。当解析器读取 js 代码时,会先读取函数的声明,此种方式定义的函数在执行任何代码之前都可以访问(调用)。
2、 函数表达式(函数字面量)
var fun = function(arg1, arg2){ |
特点:地中方式是将函数定义为表达式语句的一部分。函数可以是命名的也可以是匿名的。而且必须等到解析器执行到它所在的代码行才能真正被解释执行。
3、 函数构造法,参数必须加引号
var fun = new Function(‘arg1’, ‘arg2’, ‘alert(arg1 + “,” + arg2)’); |
特点:从技术角度讲,这是一个函数表达式。但是一般不推荐这种方式。
4、 对象直接量
var obj = { |
特点:将方法的定义看做为一个对象的成员变量,此时对象的变量值为一个方法,通过访问该对象的属性名称,达到调用方法的效果。
5、 原型继承
var obj = new Function(); |
特点:定义了一个函数对象,在其原型对象中定义方法。在使用 prototype 的方法时,必须实例化该对象才能调用其方法。
6、 工厂模式
function obj(){ |
特点:工厂模式是软件工程领域一种广为人知的设计模式,由于在 ECMAScript 中无法创建类,因此用函数封装以特定接口创建对象。即在一个函数内创建一个对象,给对象赋予属性和方法再将其对象返回。
以上介绍的几种 js 中创建方法常用的方式,根据其特点和理解可以根据实际情况使用不同的方式声明函数。
js 全局函数
parseInt (String,radix): 返回转换成整数的值。
注意:当参数 radix 的值为 0,或者没有设置这个参数,parseInt () 会根据 string 来判断数字的基数。
当忽略 radix,JavaScript 默认数字的基数规则为:
如果 string 以 0x 开头,parseInt () 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt () 的一个实现把其后的字符解析为八进制或十六进制的数。
如果 string 以 1~9 的数字开头,parseInt () 将把它解析为十进制的整数。
如果字符串以合法字符开始,parseInt () 会截取合法字符。
String 开头和结尾的空格是允许的。
如果字符串的第一个字符不能被转换为数字,parseInt () 会返回 NaN。
在字符串以”0” 为开始时旧的浏览器默认使用八进制基数。ECMAScript 5,默认的是十进制的基数。
parseFloat (string): 返回转换成浮点型的值。
该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。
isFinite (value): 检测某个是是否是无穷值。
如果 value 是 NaN 或者 + Infinity 或者 - Infinity 的数,isFinite () 返回 false。
isNaN (value): 检测某个值是否是 NaN。
isNaN () 检测是否是非数字值,如果值为 NaN 返回 true,否则返回 false。
encodeURI (uri): 将字符串编码为 URI。
使用 decodeURI () 方法可以编码 URI(通用资源标识符:Uniform Resource Identifier, 简称”URI”)。
对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI () 函数是不会进行转义的: , / ? : @ & = + $ #
(可以使用 encodeURIComponent () 方法分别对特殊含义的 ASCII 标点符号进行编码。)
decodeURI (uri): 解码某个编码的 URI。
encodeURIComponent (uri): 将字符串编码为 URI 组件
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ‘ ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),将由一个或多个十六进制的转义序列替换的。
decodeURIComponent (): 解码一个编码的 URI 组件
escape (): 对字符串进行编码
该函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
该函数不能用于编码 URIs (通用资源标识符(UniformResourceIdentifier, 简称”URI”))
unescape (): 解码由 escape () 编码的字符串
eval (): 将 JavaScript 字符串当作脚本来执行
如果参数是一个表达式,eval () 函数将执行表达式。如果参数是 Javascript 语句,eval () 将执行 Javascript 语句。
eval () 函数是一种由函数执行的动态代码,比直接执行脚本慢很多。
慎重使用 eval () 函数,尽量不用,保证程序的安全性。
Number (object): 把对象的值转换为数字
如果对象的值无法转换为数字,Number () 函数返回 NaN。
如果参数的 Date 对象,Number () 返回从 1970 年 1 月 1 日到现在所经历的毫秒数
String (): 把对象的值转换为字符串
String () 函数返回与字符串对象的 toString () 方法值一样。
顶层函数(全局函数)
函数 | 描述 |
---|---|
decodeURI() | 解码某个编码的 URI。 |
decodeURIComponent() | 解码一个编码的 URI 组件。 |
encodeURI() | 把字符串编码为 URI。 |
encodeURIComponent() | 把字符串编码为 URI 组件。 |
escape() | 对字符串进行编码。 |
eval() | 计算 JavaScript 字符串,并把它作为脚本代码来执行。 |
getClass() | 返回一个 JavaObject 的 JavaClass。 |
isFinite() | 检查某个值是否为有穷大的数。 |
isNaN() | 检查某个值是否是数字。 |
Number() | 把对象的值转换为数字。 |
parseFloat() | 解析一个字符串并返回一个浮点数。 |
parseInt() | 解析一个字符串并返回一个整数。 |
String() | 把对象的值转换为字符串。 |
unescape() | 对由 escape () 编码的字符串进行解码。 |
顶层属性(全局属性)
方法 | 描述 |
---|---|
Infinity | 代表正的无穷大的数值。 |
java | 代表 java.* 包层级的一个 JavaPackage。 |
NaN | 指示某个值是不是数字值。 |
Packages | 根 JavaPackage 对象。 |
undefined | 指示未定义的值。 |
全局对象描述
全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。全局对象不是任何对象的属性,所以它没有名称。
在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。但通常不必用这种方式引用全局对象,因为全局对象是作用域链的头,这意味着所有非限定性的变量和函数名都会作为该对象的属性来查询。例如,当 JavaScript 代码引用 parseInt () 函数时,它引用的是全局对象的 parseInt 属性。全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。
全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。
在 JavaScript 代码嵌入一个特殊环境中时,全局对象通常具有环境特定的属性。实际上,ECMAScript 标准没有规定全局对象的类型,JavaScript 的实现或嵌入的 JavaScript 都可以把任意类型的对象作为全局对象,只要该对象定义了这里列出的基本属性和函数。例如,在允许通过 LiveConnect 或相关的技术来脚本化 Java 的 JavaScript 实现中,全局对象被赋予了这里列出的 java 和 Package 属性以及 getClass () 方法。而在客户端 JavaScript 中,全局对象就是 Window 对象,表示允许 JavaScript 代码的 Web 浏览器窗口。
JavaScript 事件
事件是可以被 JavaScript 侦测到的行为。
JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。
网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件。比方说,我们可以在用户点击某按钮时产生一个 onClick 事件来触发某个函数。事件在 HTML 页面中定义。
事件举例:
- 鼠标点击
- 页面或图像载入
- 鼠标悬浮于页面的某个热点之上
- 在表单中选取输入框
- 确认表单
- 键盘按键
注意:事件通常与函数配合使用,当事件发生时函数才会执行。
onload 和 onUnload
当用户进入或离开页面时就会触发 onload 和 onUnload 事件。
onload 事件常用来检测访问者的浏览器类型和版本,然后根据这些信息载入特定版本的网页。
onload 和 onUnload 事件也常被用来处理用户进入或离开页面时所建立的 cookies。例如,当某用户第一次进入页面时,你可以使用消息框来询问用户的姓名。姓名会保存在 cookie 中。当用户再次进入这个页面时,你可以使用另一个消息框来和这个用户打招呼:”Welcome John Doe!”。
onFocus, onBlur 和 onChange
onFocus、onBlur 和 onChange 事件通常相互配合用来验证表单。
下面是一个使用 onChange 事件的例子。用户一旦改变了域的内容,checkEmail () 函数就会被调用。
<input type="text" size="30" id="email" onchange="checkEmail()"> |
onSubmit
onSubmit 用于在提交表单之前验证所有的表单域。
下面是一个使用 onSubmit 事件的例子。当用户单击表单中的确认按钮时,checkForm () 函数就会被调用。假若域的值无效,此次提交就会被取消。checkForm () 函数的返回值是 true 或者 false。如果返回值为 true,则提交表单,反之取消提交。
<form method="post" action="xxx.htm" onsubmit="return checkForm()"> |
onMouseOver 和 onMouseOut
onMouseOver 和 onMouseOut 用来创建 “动态的” 按钮。
下面是一个使用 onMouseOver 事件的例子。当 onMouseOver 事件被脚本侦测到时,就会弹出一个警告框:
<a href="http://www.w3school.com.cn" |