JS 2 Object

创建新对象有两种不同的方法:

  1. 定义并创建对象的实例
  2. 使用函数来定义对象,然后创建新的对象实例

举例

person=new Object();
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue"; 或

person = {firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};

function person(firstname,lastname,age,eyecolor) {
	this.firstname=firstname;
	this.lastname=lastname;
	this.age=age;
	this.eyecolor=eyecolor;
}
var myFather=new person("Bill","Gates",56,"blue");
var myMother=new person("Steve","Jobs",48,"green");
  • JavaScript 是面向对象的语言,但 JavaScript 不使用类.

  • 在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样).

  • JavaScript 基于 prototype,而不是基于类的.

  • JavaScript 不定义不同类型的数字,比如整数、短、长、浮点等等.

  • JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数.

  • 整数(不使用小数点或指数计数法)最多为 15 位.

  • 小数的最大位数是 17,但是浮点运算并不总是 100% 准确:

  • 如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 “x”,则解释为十六进制数.

实例

var y=0377;
var z=0xFF;

数字属性和方法

属性

MAX VALUE

MIN VALUE

NEGATIVE INFINITIVE

POSITIVE INFINITIVE

NaN

prototype

constructor

方法

toExponential()

toFixed()

toPrecision()

toString()

valueOf()

JS字符串

长度

<html>
<body>
<script type="text/javascript">
	var txt="Hello World!"
	document.write(txt.length)
</script>
</body>
</html>

样式

<html>
<body>

<script type="text/javascript">

var txt="Hello World!"

document.write("<p>Big: " + txt.big() + "</p>")
document.write("<p>Small: " + txt.small() + "</p>")

document.write("<p>Bold: " + txt.bold() + "</p>")
document.write("<p>Italic: " + txt.italics() + "</p>")

document.write("<p>Blink: " + txt.blink() + " (does not work in IE)</p>")
document.write("<p>Fixed: " + txt.fixed() + "</p>")
document.write("<p>Strike: " + txt.strike() + "</p>")

document.write("<p>Fontcolor: " + txt.fontcolor("Red") + "</p>")
document.write("<p>Fontsize: " + txt.fontsize(16) + "</p>")

document.write("<p>Lowercase: " + txt.toLowerCase() + "</p>")
document.write("<p>Uppercase: " + txt.toUpperCase() + "</p>")

document.write("<p>Subscript: " + txt.sub() + "</p>")
document.write("<p>Superscript: " + txt.sup() + "</p>")

document.write("<p>Link: " + txt.link("http://www.w3school.com.cn") + "</p>")
</script>

</body>
</html>

定位位置0, -1, 6

<html>
<body>

<script type="text/javascript">

var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")
document.write(str.indexOf("World") + "<br />")
document.write(str.indexOf("world"))

</script>

</body>
</html>

匹配world, null, null, world!

<html>
<body>

<script type="text/javascript">

var str="Hello world!"
document.write(str.match("world") + "<br />")
document.write(str.match("World") + "<br />")
document.write(str.match("worlld") + "<br />")
document.write(str.match("world!"))

</script>

</body>
</html>

替换

<html>
<body>

<script type="text/javascript">

var str="Visit Microsoft!"
document.write(str.replace(/Microsoft/,"W3School"))

</script>
</body>
</html>

Date对象

document.write(Date())

Tue Aug 22 2017 08:25:20 GMT+0800 (中国标准时间)

当前时间

var d=new Date();
document.write("从 1970/01/01 至今已过去 " + d.getTime() + " 毫秒");

从 1970/01/01 至今已过去 1503361464579 毫秒

var d = new Date()
d.setFullYear(1992,10,3)
ocument.write(d)

Tue Nov 03 1992 08:24:49 GMT+0800 (中国标准时间)

var d = new Date()
document.write (d.toUTCString())

Tue, 22 Aug 2017 00:25:35 GMT

var d=new Date()
var weekday=new Array(7)
weekday[0]="星期日"
weekday[1]="星期一"
weekday[2]="星期二"
weekday[3]="星期三"
weekday[4]="星期四"
weekday[5]="星期五"
weekday[6]="星期六"
document.write("今天是" + weekday[d.getDay()])

配合运用输出今天是星期二

输出d.getDay()的结果是2

<html>
<head>
<script type="text/javascript">
function startTime()
{
var today=new Date()
var h=today.getHours()
var m=today.getMinutes()
var s=today.getSeconds()
// add a zero in front of numbers<10
m=checkTime(m)
s=checkTime(s)
document.getElementById('txt').innerHTML=h+":"+m+":"+s
t=setTimeout('startTime()',500)
}

function checkTime(i)
{
if (i<10) 
  {i="0" + i}
  return i
}
</script>
</head>

<body onload="startTime()">
<div id="txt"></div>
</body>
</html>

在网页上显示一个动态的时间

setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式.

表示月份的参数介于 0 到 11 之间.也就是说,如果希望把月设置为 8 月,则参数应该是 7.

Date 对象自动使用当前的日期和时间作为其初始值.

如果增加天数会改变月份或者年份,那么日期对象会自动完成这种转换.

比较日期

if (myDate>today) {
	alert("Today is before 9th August 2008");
} else {
	alert("Today is after 9th August 2008");
}

数组对象

创建,赋值,for in输出

var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}

拼接concat

输出George,John,Thomas,James,Adrew,Martin

但是这并非扩展了arr

var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"

var arr2 = new Array(3)
arr2[0] = "James"
arr2[1] = "Adrew"
arr2[2] = "Martin"

document.write(arr.concat(arr2))

输出George,John,Thomas,James,Adrew,Martinundefined

可见arr并没有被扩展

var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"

var arr2 = new Array(3)
arr2[0] = "James"
arr2[1] = "Adrew"
arr2[2] = "Martin"

document.write(arr.concat(arr2))
document.write(arr[3])

输出

George,John,Thomas

George.John.Thomas

将数组拼合成字符串

var arr = new Array(3);
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"

document.write(arr.join());

document.write("<br />");

document.write(arr.join("."));

排序,默认是字典序

George,John,Thomas,James,Adrew,Martin

Adrew,George,James,John,Martin,Thomas

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")
document.write(arr.sort())

数字排序

注意到这个函数似曾相识,java中collection的排序好像允许加入一种排序的规范进行排序;

function sortNumber(a, b) {
	return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber))

逻辑值

<html>
<body>

<script type="text/javascript">
var b1=new Boolean( 0)
var b2=new Boolean(1)
var b3=new Boolean("")
var b4=new Boolean(null)
var b5=new Boolean(NaN)
var b6=new Boolean("false")

document.write("0 是逻辑的 "+ b1 +"<br />")
document.write("1 是逻辑的 "+ b2 +"<br />")
document.write("空字符串是逻辑的 "+ b3 + "<br />")
document.write("null 是逻辑的 "+ b4+ "<br />")
document.write("NaN 是逻辑的 "+ b5 +"<br />")
document.write("字符串 'false' 是逻辑的 "+ b6 +"<br />")
</script>

</body>
</html>

输出

0 是逻辑的 false

1 是逻辑的 true

空字符串是逻辑的 false

null 是逻辑的 false

NaN 是逻辑的 false

字符串 ‘false’ 是逻辑的 true

Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false)

算数对象

round()

最接近的整数

random()

随机0-1之间

max()

两个数中较大的

min()

两个数中最小的

JavaScript 提供 8 种可被 Math 对象访问的算数值:

  • 常数

  • 圆周率

  • 2 的平方根

  • 1/2 的平方根

  • 2 的自然对数

  • 10 的自然对数

  • 以 2 为底的 e 的对数

  • 以 10 为底的 e 的对数

这是在 Javascript 中使用这些值的方法:(与上面的算数值一一对应)

Math.E
Math.PI
Math.SQRT2
Math.SQRT1_2
Math.LN2
Math.LN10
Math.LOG2E
Math.LOG10E

floor()

RegExp 对象用于规定在文本中检索的内容

var patt1 = new RegExp("e");
document.write(patt1.test("The best things in life are free")); 

由于该字符串中存在字母 “e”,以上代码的输出将是:

true

test()方法检索字符串中的指定值.返回值是 true 或 false.

var patt1 = new RegExp("e");

document.write(patt1.exec("The best things in life are free"));

由于该字符串中存在字母 “e”,以上代码的输出将是:

e

exec()方法检索字符串中的指定值.返回值是被找到的值.如果没有发现匹配,则返回 null.

在使用 “g” 参数时,exec()的工作原理如下:

找到第一个 “e”,并存储其位置

如果再次运行 exec(),则从存储的位置开始检索,并找到下一个 “e”,并存储其位置

var patt1 = new RegExp("e","g");
do {
	result = patt1.exec("The best things in life are free");
	document.write(result);
}
while (result != null) 

由于这个字符串中 6 个 “e” 字母,代码的输出将是:

eeeeeenull

g参数是global,可以找到某个字符的所有存在

var patt1=new RegExp("e");

document.write(patt1.test("The best things in life are free"));

patt1.compile("d");

document.write(patt1.test("The best things in life are free"));

由于字符串中存在 “e”,而没有 “d”,以上代码的输出是:

truefalse

compile()方法用于改变 RegExp.

compile()既可以改变检索模式,也可以添加或删除第二个参数.

window浏览器对象

浏览器对象模型(Browser Object Model)尚无正式标准

Window 尺寸

有三种方法能够确定浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条). 对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:

window.innerHeight - 浏览器窗口的内部高度
window.innerWidth - 浏览器窗口的内部宽度

对于 Internet Explorer 8、7、6、5:

document.documentElement.clientHeight
document.documentElement.clientWidth

或者

document.body.clientHeight
document.body.clientWidth

实用的 JavaScript 方案(涵盖所有浏览器):

实例

var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;

var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

window.open()       //打开新窗口
window.close()      //关闭当前窗口
window.moveTo() 	//移动当前窗口
window.resizeTo() 	//调整当前窗口的尺寸

screen.availWidth   //属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如窗口任务栏.
screen.availHeight  //属性返回访问者屏幕的高度,以像素计,减去界面特性,比如窗口任务栏.

window.location     //对象在编写时可不使用 window 这个前缀.

一些例子:

location.hostname   //返回 web 主机的域名
location.pathname   //返回当前页面的路径和文件名
location.port       //返回 web 主机的端口 (80 或 443)
location.protocol   //返回所使用的 web 协议(http:// 或 https://)
location.href       //属性返回当前页面的 URL.

<html>
<head>
<script>
function newDoc() {
	window.location.assign("http://www.w3school.com.cn")
}
</script>
</head>
<body>
	<input type="button" value="加载新文档" onclick="newDoc()">
</body>
</html>

window.history 对象在编写时可不使用 window 这个前缀.

为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制.

一些方法:

history.back()     //与在浏览器点击后退按钮相同

history.forward()  //与在浏览器中点击按钮向前相同

window.navigator   //对象包含有关访问者浏览器的信息.

警告:来自 navigator 对象的信息具有误导性,不应该被用于检测浏览器版本,这是因为:

navigator 数据可被浏览器使用者更改

浏览器无法报告晚于浏览器发布的新操作系统

<div id="example"></div>
<script>
	txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
	txt+= "<p>Browser Name: " + navigator.appName + "</p>";
	txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
	txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
	txt+= "<p>Platform: " + navigator.platform + "</p>";
	txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
	txt+= "<p>User-agent language: " + navigator.systemLanguage + "</p>";
	document.getElementById("example").innerHTML=txt;
</script>

由于 navigator 可误导浏览器检测,使用对象检测可用来嗅探不同的浏览器.

由于不同的浏览器支持不同的对象,您可以使用对象来检测浏览器.

例如,由于只有 Opera 支持属性 “window.opera”,您可以据此识别出 Opera.

例子:

if (window.opera) {...some action...}

<html>
<head>
<script type="text/javascript">
function disp_prompt()
  {
  var name=prompt("请输入您的名字","Bill Gates")
  if (name!=null && name!="")
    {
    document.write("你好!" + name + " 今天过得怎么样?")
    }
  }
</script>
</head>
<body>

<input type="button" onclick="disp_prompt()" value="显示提示框" />

</body>
</html>

提示框

<html>
<head>
<script type="text/javascript">
function show_confirm() {
	var r=confirm("Press a button!");
	if (r==true) {
	 	alert("You pressed OK!");
	} else {
	  	alert("You pressed Cancel!");
	}
}
</script>
</head>
<body>
	<input type="button" onclick="show_confirm()" value="Show a confirm box" />
</body>

确认框

alert("再次向您问好!在这里,我们向您演示" + '\n' + "如何向警告框添加折行.")

警告框,可以加入\n支持换行

计时事件

举例

<html>
<head>
<script type="text/javascript">
var c=0
var t
function timedCount() {
	document.getElementById('txt').value=c
	c=c+1
	t=setTimeout("timedCount()",1000)
}

function stopCount() {
	c=0;
	setTimeout("document.getElementById('txt').value=0",0);
	clearTimeout(t);
}
</script>
</head>

<body>
<form>
	<input type="button" value="开始计时!" onClick="timedCount()">
	<input type="text" id="txt">
	<input type="button" value="停止计时!" onClick="stopCount()">
</form>

<p>请点击上面的"开始计时"按钮来启动计时器.输入框会一直进行计时,从 0 开始.点击"停止计时"按钮可以终止计时,并将计数重置为 0.</p>
</body>
</html>

setTimeout() 未来的某时执行代码

clearTimeout() 取消setTimeout()

cookie对象

<html>
<head>
<script type="text/javascript">
function getCookie(c_name) {
	if (document.cookie.length>0) { 
		c_start=document.cookie.indexOf(c_name + "=")
		if (c_start != -1) { 
			c_start = c_start + c_name.length+1 
			c_end = document.cookie.indexOf(";",c_start)
			if (c_end == -1) 
				c_end = document.cookie.length
			return unescape(document.cookie.substring(c_start, c_end))
		} 
	}
	return ""
}

function setCookie(c_name,value,expiredays) {
	var exdate=new Date()
	exdate.setDate(exdate.getDate()+expiredays)
	document.cookie = c_name + "=" + escape(value) +
	    ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())
}

function checkCookie() {
	username=getCookie('username')
	if (username!=null && username!="") {
		alert('Welcome again '+username+'!')
	} else {
	  	username=prompt('Please enter your name:',"")
	  	if (username!=null && username!="") {
	    	setCookie('username',username,365)
	  	}
	}
}
</script>
</head>
<body onLoad="checkCookie()">
</body>
</html>

这里escape()函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串.

注意到getCookie中,indexof,第二个参数是可选参数,指从哪里开始检索

注意到用;结尾,可知每条cookie使用分号结尾

差不多JavaScript就到这里了,下面的jQuery会单开