javascript 基础

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>basic.html</title>
	
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
	<script type="text/javascript" src="../js/jquery-1.11.3.js"></script>
	<script type="text/javascript">
	// <![CDATA[
	//如果你需要在没有硬编码的window标识符下访问全局对象,你可以在任何层级的函数作用域中做如下操作:
	var global = (function () {
		return this;
	})();
	function show(str) {
		$("#div").append($("<p></p>").text("" + str));
	}

	$(document).ready(function() {
		
		//HTML 中的脚本必须位于 <script> 与 <\/script> 标签之间。
		//脚本可被放置在 HTML 页面的 <body> 和 <head> 部分中。
		//JavaScript 是所有现代浏览器以及 HTML5 中的默认脚本语言。
		//提示:外部脚本不能包含 <script> 标签。
		//请使用 document.write()仅仅向文档输出写内容。
		//如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖。
		
		//分号 ;
		//分号用于分隔 JavaScript 语句。
		//通常我们在每条可执行的语句结尾添加分号。
		//在 JavaScript 中,用分号来结束语句是可选的。
		
		//JavaScript 对大小写敏感。
		//提示:JavaScript 语句和 JavaScript 变量都对大小写敏感。
		//提示:关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。
		
		//空格
		//JavaScript 会忽略多余的空格。您可以向脚本添加空格,来提高其可读性。
		
		//对代码行进行折行
		//您可以在文本字符串中使用反斜杠对代码行进行换行。
		show("hello \
			world");
		//提示:JavaScript 是脚本语言。浏览器会在读取代码时,逐行地执行脚本代码。而对于传统编程来说,会在执行前对所有代码进行编译。
		
		//JavaScript 注释可用于提高代码的可读性。
		//单行注释以 // 开头。可以在行末使用注释。
		//多行注释以 /* 开始,以 */ 结尾。
		
		//JavaScript 变量
		//•变量必须以字母开头
		//•变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)
		//•变量名称对大小写敏感(y 和 Y 是不同的变量)
		//当您向变量分配文本值时,应该用双引号或单引号包围这个值。
		//提示:一个好的编程习惯是,在代码开始处,统一对需要的变量进行声明。
		
		//变量声明之后,该变量是空的(它没有值)。未使用值来声明的变量,其值实际上是 undefined。
		var carname;
		show(carname);	//undefined
		
		//如果重新声明 JavaScript 变量,该变量的值不会丢失,在进入执行上下文时,会把所有的变量和函数声明置顶解析
		carname = "bmw";
		var carname;
		show(carname);	//bmw
		
		//JavaScript 数据类型: String、Number、Boolean、Array、Object、Null、Undefined
		//JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型。
		//JavaScript Array
		var cars1 = new Array();
		cars1[0] = "Audi";
		cars1[1] = "BMW";
		cars1[2] = "Volvo";
		var cars2 = new Array("Audi","BMW","Volvo");
		var cars3 = ["Audi","BMW","Volvo"];
		show([cars1, cars2, cars3]);
		//JavaScript Object
		var person = {
						id: 5566, 
						firstname: "Bill", 
						lastname: "Gates", 
						valueOf: function () { 
								return "id("  + this.id +") " + this.firstname + " " + this.lastname; }
		};
		show(person);	//id(5566) Bill Gates
		show([person.id, person["firstname"], person.lastname]);
		
		//Undefined 和 Null
		//Undefined 这个值表示变量不含有值。
		//可以通过将变量的值设置为 null 来清空变量。
		var car_undefined;
		person = null;
		show(car_undefined + " " + person);	//undefined null
		
		//JavaScript 变量均为对象。当您声明一个变量时,就创建了一个新的对象。
		//JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。
		//在 JavaScript 中,对象是拥有属性和方法的数据。
		//创建 JavaScript 对象
		person = new Object();
		person.firstname = "jaeson";
		person.lastname = "chen";
		person.id = 1001;
		person.valueOf = function () { 
								return "id("  + this.id +") " + this.firstname + " " + this.lastname; };
		show(person);	//id(1001) jaeson chen
		
		//JavaScript局部变量
		//在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。
		//只要函数运行完毕,本地变量就会被删除(闭包是例外)。
		
		//全局 JavaScript 变量
		//在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
		
		//JavaScript 变量的生存期
		//JavaScript 变量的生命期从它们被声明的时间开始。
		//局部变量会在函数运行以后被删除。
		//全局变量会在页面关闭后被删除。
		
		//向未声明的 JavaScript 变量来分配值
		//如果您把值赋给尚未声明的变量,即使它在函数内。该变量将被自动作为全局对象的属性声明。
		
		//比较运算符
		// == 等于 
		// === 全等(值和类型) 
		// != 不等于 
		// 条件运算符 variablename = (condition) ? value1 : value2
		
		//JavaScript If Else 语句
		//if (condition1) statement1 else if (condition2) statement2 else statement3
		//提示:使用代码块被认为是一种最佳的编程实践,即使要执行的代码只有一行。这样做可以使每个条件要执行什么一目了然。
		
		//JavaScript Switch 语句
		//switch 语句可以用于字符串
		//使用 break 来阻止代码自动地向下一个 case 运行。
		//switch (expression)
		//	  case value1: statement;
		//	    break;
		//	  case value2: statement;
		//	    break;
		//	  ...
		//	  case valuen: statement;
		//	    break;
		//	  default: statement;
		
		//JavaScript 循环
		//•for 		- 循环代码块一定的次数  for (initialization; expression; post-loop-expression) statement
		//•for/in 	- 严格的迭代语句,用于枚举对象的属性  for (property in expression) statement
		//•while 	- 当指定的条件为 true 时循环指定的代码块  while (expression) statement
		//•do/while - 同样当指定的条件为 true 时循环指定的代码块  do {statement} while (expression);
		var str = "";
		for(var i = cars1.length; i--;) {
			str += cars1[i] + ", ";
		}
		show(str);
		str = "";
		for(p in person) {
			str += person[p] + ", ";
		}
		show(str);
		
		//break 语句用于跳出循环。
		//continue 用于跳过循环中的一个迭代。
		//标签语句   给语句加标签,以便以后调用:labelname : statement
		//break 语句和 continue 语句都可以与有标签的语句联合使用,返回代码中的特定位置。
		//通过标签引用,break 语句可用于跳出任何 JavaScript 代码块。
		//break labelname;
		//continue labelname;
		var iNum = 0;
		outermost:
		for (var i=0; i<10; i++) {
			for (var j=0; j<10; j++) {
				if (i == 5 && j == 5) {
		    		continue outermost;
		  		}
		  		iNum++;
		  	}
		}
		show(iNum);		//95
		
		//JavaScript 错误 - Throw、Try 和 Catch
		//try 语句测试代码块的错误。
		//catch 语句处理错误。
		//throw 语句创建自定义错误。
		//JavaScript 抛出错误
		//当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。
		var x = "a";
		try {
			if(x == "")
				throw "empty";
  			if(isNaN(x))
				throw "not a number";
			if(x > 10)
				throw "too high";
			if(x < 5)
				throw "too low";
		} catch (error) {
			show("Error: " + error);
		}
		
		//JavaScript Number 对象
		//JavaScript 只有一种数字类型。
		//所有 JavaScript 数字均为 64 位
		//JavaScript 不是类型语言。与许多其他编程语言不同,JavaScript 不定义不同类型的数字。
		//JavaScript 中的所有数字都存储为根为 2的 64 位(8 byte),浮点数。
		//精度
		//整数(不使用小数点或指数计数法)最多为 15 位。
		//小数的最大位数是 17,但是浮点运算并不总是 100% 准确
		//八进制和十六进制
		//如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 "x",则解释为十六进制数。
		var eight = 0377;
		var sixteen = 0xFF;
		show([eight, sixteen, eight + sixteen]);
		
		//JavaScript Date(日期)对象
		//注释:Date 对象自动使用当前的日期和时间作为其初始值。
		global.startTime = function () {
			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);
			$("#clock").html(h + ":" + m + ":" + s);
			t = setTimeout('startTime()', 500);
		};
		global.checkTime = function (i) {
			if (i < 10) {
				i = "0" + i;
			}
			return i;
		};
		startTime();
		
		var myDate = new Date();
		var weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
		show("今天是" + weekday[myDate.getDay()]);
		show([myDate.getFullYear(), myDate.getTime(), myDate]);
		
		//JavaScript Array 对象
		var arr = [1, 3, 10, 20, 2, 4, 0, 15];
		//Array.sort(sortby) 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序
		show(arr.sort(function (a, b) { return a - b; }));
		//Array.join(seperator) 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 
		show(arr.join("."));
		var arrAnother = [30, 31, 40];
		//Array.concat(arr...) 连接两个或更多的数组,并返回结果。
		show(arr.concat(arrAnother));
		//Array.pop() 删除并返回数组的最后一个元素 
		//Array.push(element1,element2...) 向数组的末尾添加一个或更多元素,并返回新的长度。 它直接修改 arrayObject,而不是创建一个新的数组。
		//Array.reverse() 颠倒数组中元素的顺序。 
		//Array.shift() 删除并返回数组的第一个元素 
		//Array.unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
		//Array.slice(start,end) 从已有的数组中返回选定的元素。该方法并不会修改数组,而是返回一个子数组。
		
		//JavaScript Boolean(逻辑)对象
		//Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false)。
		//注释:如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。
		//否则,其值为 true(即使当自变量为字符串 "false" 时)!
		show([new Boolean(), new Boolean(0), new Boolean(-0), new Boolean(null), new Boolean(""), 
				new Boolean(undefined), new Boolean(false), new Boolean(NaN), 
				new Boolean(1), new Boolean("jaeson"), new Boolean("false")]);
		
		//JavaScript Math(算数)对象
		//Math 对象用于执行数学任务。
		//Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。
		//返回一个介于 0 和 10 之间的随机数:
		show(Math.floor(Math.random()*11));
		
		//JavaScript RegExp 对象
		//RegExp 对象用于存储检索模式。
		//直接量语法 /pattern/attributes
		//创建 RegExp 对象的语法:new RegExp(pattern, attributes);
		//参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
		//参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。
		
		//RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
		//test() 方法检索字符串中的指定值。返回值是 true 或 false。
		//exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
		//compile() 方法用于改变 RegExp。
		
		//方括号
		//[abc] 	查找方括号之间的任何字符。 
		//[^abc] 	查找任何不在方括号之间的字符。 
		//[0-9] 	查找任何从 0 至 9 的数字。 
		//[a-z] 	查找任何从小写 a 到小写 z 的字符。 
		//[A-Z] 	查找任何从大写 A 到大写 Z 的字符。 
		//(red|blue|green) 查找任何指定的选项。 
		
		//元字符
		//.  查找单个字符,除了换行和行结束符。 
		//\w 查找单词字符。 
		//\W 查找非单词字符。 
		//\d 查找数字。 
		//\D 查找非数字字符。 
		//\s 查找空白字符。 
		//\S 查找非空白字符。 	 
		//\n 查找换行符。 
		//\r 查找回车符。 	 
		//\t 查找制表符。 
		
		//量词
		//n+ 	匹配任何包含至少一个 n 的字符串。 
		//n*	匹配任何包含零个或多个 n 的字符串。 
		//n? 	匹配任何包含零个或一个 n 的字符串。 
		//n{X} 	匹配包含 X 个 n 的序列的字符串。 
		//n{X,Y}匹配包含 X 或 Y 个 n 的序列的字符串。 y >= x
		//n{X,} 匹配包含至少 X 个 n 的序列的字符串。 
		//n$ 	匹配任何结尾为 n 的字符串。 
		//^n 	匹配任何开头为 n 的字符串。 
		
		//支持正则表达式的 String 对象的方法
		//search 	检索与正则表达式相匹配的值。 返回第一个与 regexp 相匹配的子串的起始位置。注释:如果没有找到任何匹配的子串,则返回 -1。
		//match 	找到一个或多个正则表达式的匹配。返回存放匹配结果的数组。
		//replace 	替换与正则表达式匹配的子串。 
		//split 	把字符串分割为字符串数组。 
		show("how are you".split(/\s+/));
		
		var strReplace = "Welcome to Microsoft! ";
		strReplace += "We are proud to announce that microsoft has ";
		strReplace += "one of the largest Web Developers sites in the world.";
		show(strReplace.replace(/Microsoft/gi, "baidu"));
		show("zq chen".replace(/(\w+)\s+(\w+)/, "$2 $1"));
		show("1 a2 3 4a afa55a".match(/\d+./g));
		show(strReplace.search(/microsoft/i));
		
		//JavaScript 全局对象
		//顶层函数(全局函数)
		//eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码,eval中声明的变量会成为全局变量。
		//isNaN() 函数用于检查其参数是否是非数字值。
		//Number() 函数把对象的值转换为数字。如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
		//parseFloat() 函数可解析一个字符串,并返回一个浮点数。如果参数字符串的第一个字符不能被解析成为数字,则 parseFloat 返回 NaN。
		//parseInt() 函数可解析一个字符串,并返回一个整数。如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
		//encodeURI(URIstring) 函数可把字符串作为 URI 进行编码。返回URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
		//该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
		//对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
		show(encodeURI("http://www.w3school.com.cn/My first/"));
		//decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
		show(decodeURI("http://www.w3school.com.cn/My%20first/"));
		//escape(string) 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。返回已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
		//该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。
		show(escape("Visit W3School!"));
		show(escape("?!=()#%&"));
		//unescape() 函数可对通过 escape() 编码的字符串进行解码。
		//该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。
		show(unescape("%3F%21%3D%28%29%23%25%26"));
		//encodeURIComponent(URIstring) 函数可把字符串作为 URI 组件进行编码。
		//该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
		//其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
		//提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。
		//因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。
		show(encodeURIComponent("http://www.w3school.com.cn/My first/"));
		//decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
		show(decodeURIComponent("http%3A%2F%2Fwww.w3school.com.cn%2FMy%20first%2F"));
		
		//在 JavaScript 核心语言中,全局对象的预定义属性都是不可枚举的,所有可以用 for/in 循环列出所有隐式或显式声明的全局变量
		var variables = "";
		for (var name in global) {
			variables += name + ", ";
		}
		show(variables);
		
	});
	// ]]>
	</script>
  </head>
  
  <body>
    <script>
	document.write("<p>My First JavaScript</p>");
	</script>
	<p id="clock">This is a paragraph.</p>
	<div id="div"></div>
  </body>
</html>

猜你喜欢

转载自jaesonchen.iteye.com/blog/2287496