学习《JavaScript经典实例》之第1~3章

《JavaScript经典实例》各节中的完整代码解决了常见的编程问题,并且给出了在任何浏览器中构建Web应用程序的技术。只需要将这些代码示例复制并粘贴到你自己的项目中就行了,可以快速完成工作,并且在此过程中学习JavaScript的很多知识。

第1章 JavaScript不只是简单的构件块

1.1 JavaScript对象、基本类型和字面值之间的区别
  • 5种基本类型:字符串、数值、布尔值、null、undefined,有3个有对应的构造方法对象:string、Number、Boolean

  • 基本类型变量严格等于字面值,而对象实例则不会,因为基本类型是按值来比较的,而值是字面值

var num1 = 123;
var num2 = new Number(123);
console.log(typeof num1);  //number 
console.log(typeof num2);  //object
复制代码
1.2 从字符串提取一个列表
  • 提取之前:This is a list of items: cherries, limes, oranges, apples.
  • 提取之后:['cherries','limes','oranges','apples']
  • indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
  • substring() 方法用于提取字符串中介于两个指定下标之间的字符。
  • split() 方法用于把一个字符串分割成字符串数组。
var sentence = 'This is one sentence. This is a sentence with a list of items: cherries, oranges, apples, bananas. That was the list of items.';
var start = sentence.indexOf(':');
var end = sentence.indexOf('.', start+1);
var listStr = sentence.substring(start+1, end);
var fruits = listStr.split(',');
console.log(fruits);  //[" cherries", " oranges", " apples", " bananas"]

//取出空格等
fruits.forEach(function(elmnt,indx,arry) {
    arry[indx] = elmnt.trim();
});
console.log(fruits);  //["cherries", "oranges", "apples", "bananas"]
复制代码
1.3 检查一个存在的、非空的字符串
  • 想要验证一个变量已经定义了,是一个字符串,并且它不为空
if(typeof unknowVariable === 'string' && unknowVariable.length > 0) {...}
复制代码
1.4 插入特殊字符
  • 想要向字符串中插入一个特殊字符,例如一个换行
  • 转义序列都以一个反斜杠 开始(\)
1.5 使用新字符串替换模式
  • 使用String对象的replace方法和一个 正则表达式
  • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
正则表达式特殊字符
字符匹配例子
^匹配输入的开头/^This/ 匹配This is...
$匹配输入的结束/end$/ 匹配This is the end
*匹配0次或多次/se*/ 匹配s seeee或se
?匹配0次或1次/ap?/ 匹配apple and and
+匹配1次或多次/ap+/ 匹配apple 但是不匹配and
{n}严格匹配n次/ap{2}/ 严格匹配apple 但是不匹配apie
{n,}匹配n次或多次/ap{2,}/ 匹配apple中的p,但是不匹配apie中的p
{n,m}至少匹配n次,之多匹配m
除换行以外的任何字符
/ap{2,4}/ 匹配apppppple中的4个p
/a.e/ 匹配ape和axe
[...]方括号中的任何字符/a[px]e/ 匹配ape axe 但是不匹配apxe
[^...]除了方括号以外的任何字符/a[^px]/ 匹配ale 但是不匹配ape axe
\b匹配单词边界/\bno/ 匹配nono中的第一个no
\B匹配非单词边界/\Bno/ 匹配nono中的第二个no
\d数字0到9/\d{3}/ 匹配Now in 123 中的123
\D匹配任何非数字字符/\D{2,4}/ 匹配Now in 123 中的Now in
\w匹配任何单词字符(字母、数组和下划线/\w/ 匹配javaScript中的j
\W匹配任何非单词字符(非字母、数组和下划线)/\W/ 匹配100%中的%
\n匹配一个换行
\s一个单个的空白字符
\S一个单个的非空白字符
\t一个制表符
(x)捕获括号记住匹配的字符
var searchString = "Now is the time, this is the tame";
var re = /t\w{2}e/g;
var replacement = searchString.replace(re, 'place');
console.log(replacement);  //Now is the place, this is the place
复制代码
1.6 找到并突出显示一个模式的所有实例
  • RegExp exec() 方法用于检索字符串中的正则表达式的匹配
  • RegExpObject.exec(string)
  • 返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null
var searchString2 = "Now is the time and this is the time and that is the time";
var parttern = /t\w*e/g;  //\w 匹配任何单词字符
var matchArray;

var str = "";

//用regexp exec检查模式,如果不为空,处理它
while((matchArray = parttern.exec(searchString2)) != null) {
	str += "at " + matchArray.index + " we found " + matchArray[0] + "\n";
}
console.log(str);
// at 7 we found the
// at 11 we found time
// at 28 we found the
// at 32 we found time
// at 49 we found the
// at 53 we found time
复制代码
//实例1-1
document.getElementById("searchSubmit").onclick = function() {

    //获取模式
    var pattern = document.getElementById("pattern").value;
    var re = new RegExp(pattern, "g");
    //获取字符串
    var searchString = document.getElementById("inComing").value;
    
    var matchArray;
    var resultString = "<pre>";
    var first = 0;
    var last = 0;
    
    //找到每一个匹配
    while((matchArray = re.exec(searchString)) != null) {
    	last = matchArray.index;
    
    	//获取所有匹配的字符串,将其连接起来
    	resultString += searchString.substring(first, last);
    
    	//使用class,添加匹配的字符串
    	resultString += '<span class="found">' + matchArray[0] + '</span>';
    	first = re.lastIndex;
    }
    
    //完成字符串
    resultString += searchString.substring(first, searchString.length);
    resultString += "</pre>";
    
    //插入页面
    document.getElementById("searchResult").innerHTML = resultString;

}
复制代码
1.7 使用捕获圆括号交换一个字符串中的单词
  • 交换名称,让姓氏先出现
  • 解决:使用捕获圆括号和一个正则表达式在字符串中找到并记住他们的名字,然后互换他们
  • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
字符替换文本
$1、$2、...、$99与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&与 regexp 相匹配的子串。
$`位于匹配子串左侧的文本。
$'位于匹配子串右侧的文本。
$$允许替换中有一个字面值美元符号($)
$n插入使用RegExp的第n次捕获圆括号的值
var myName = "Tao Yang";
var nameRe = /^(\w+)\s(\w+)$/;
var myNewName = myName.replace(nameRe, "$2 $1");
console.log(myNewName);  //Yang Tao
复制代码
1.8 使用命名实体来替代HTML标签
  • 使用正则表达式把尖括号(<>)转换为命名的实体:<和>
var pieceOfHtml = "<p>This is a <span>paragraph</span></p>";
pieceOfHtml = pieceOfHtml.replace(/</g, "&lt;");
pieceOfHtml = pieceOfHtml.replace(/>/g, "&gt;");
console.log(pieceOfHtml); //&lt;p&gt;This is a &lt;span&gt;paragraph&lt;/span&gt;&lt;/p&gt;
复制代码
1.9 ISO 8610格式的日期转换为Date对象可接受的一种形式
var dtstr = "2014-3-04T19:35:32Z";
dtstr = dtstr.replace(/\D/g, " ");
console.log(dtstr);  //2014 3 04 19 35 32
var dtcomps = dtstr.split(" ");
//在基于1的ISO 8610月份和基于0的日期格式之间转换
dtcomps[1]--;

var convdt = new Date(Date.UTC.apply(null, dtcomps));
console.log(convdt.toString());  //Wed Mar 05 2014 03:35:32 GMT+0800 (中国标准时间)
复制代码
1.10 使用带有定时器的函数闭包
  • 使用一个匿名函数作为setInterval()或setTimeout()方法调用的第一个参数
var intervalId = null;
document.getElementById("redbox").addEventListener('click', startBox, false);
function startBox() {
    if(intervalId == null) {
        var x = 100;
        intervalId = setInterval(function() {
            x += 5;
            var left = x + "px";
            document.getElementById("redbox").style.left = left;
        }, 500);
    } else {
        clearInterval(intervalId);
        intervalId = null;
    }
}
复制代码
1.11 记录两个事件之间消耗的时间
  • 在第一个事件发生的时候,创建一个Date对象,当第二个时间发生的时候,创建一个新的Date对象,并且从第二个对象中减去第一个对象。两者之间的差以毫秒表示的,要转换为秒,就除以1000
  • 两个日期可以相减,但是相加就成了拼接字符串
var firstDate = new Date();
setTimeout(function() {
    doEvent(firstDate);
}, 25000);

function doEvent() {
    var secondDate = new Date();
    var diff = secondDate - firstDate;
    console.log(diff);   //25001
}
复制代码
1.12 十进制数转化为十六进制值
var num = 255;
console.log(num.toString(16));  //ff
复制代码
1.13 想要将表中一列的所有数字加和
  • 遍历表中包含了数字值的列,将其转换为数字,并加和
  • querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素
  • 如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代
  • 全局函数 parseInt()parseFloat() 都把字符串转化为数字
var sum = 0;
//使用querySelectorAll找到第二列的所有单元格
var cells = document.querySelectorAll("td:nth-of-type(2)");
for(var i=0, l=cells.length; i<l; i++) {
    sum += parseFloat(cells[i].firstChild.data);
}
复制代码
1.14 在角度和弧度之间转换
  • 将角度转换为弧度
var radians = degrees * (Math.PI / 180);

复制代码
  • 将弧度转化为角度
var degrees = radians * (180 / Math.PI);
复制代码
1.15 找到页面元素可容纳的一个圆的半径和圆心
  • Math.min(x,y)方法可返回指定的数字中带有最低值的数字。
  • 求出宽度和高度中较小的一个,用其除以2得到半径
var circleRadius = Math.min(elemengWidth, elemengHeight) / 2;
复制代码
  • 给指定页面元素的宽度、高度,通过将二者都除以2来找到其中心点
var x = elemengWidth / 2;
var y = elemengHeight / 2;
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>将一个SVG圆放入到一个div元素中</title>
	<style type="text/css">
		#elem {
			width: 100%;
			height: 500px;
			border: 1px solid #ddd;
			background-color: #ddd;
		}
	</style>
</head>
<body>

	<div id="elem">
		<svg width="100%" height="100%">
			<circle id="circ" width="10" height="10" r="10" fill="#f90">
		</svg>
	</div>


	<script type="text/javascript">
	window.onload = window.onresize = function() {
		var box = document.getElementById("elem");
		var style = window.getComputedStyle(box, null);
		var width = parseInt(style.getPropertyValue("width"));
		var height = parseInt(style.getPropertyValue("height"));
		console.log('w', width, 'h', height);
		var x = width / 2;
		var y = height / 2;

		var circleRadius = Math.min(width, height) / 2;

		var circ = document.getElementById("circ");
		circ.setAttribute("r", circleRadius);
		circ.setAttribute("cx", x);
		circ.setAttribute("cy", y);
		console.log('r', circleRadius, ' cx', x, ' cy', y);
	}
	</script>
</body>
</html>
复制代码
1.16 计算圆弧的长度
  • 给定了一个圆的半径及圆弧角的角度值,求该圆弧的长度
  • 使用Math.PI把角度转换为弧度,并在公式中使用该结果来求得圆弧的长度
var radians = degrees * (Math.PI / 180);
var arclength = radians * radians;
复制代码

第2章 JavaScript数组

2.1 在数组中搜索
  • indexOf()、lastIndexOf()
var animals = new Array('dog', 'cat', 'seal', 'elephant', 'walrus', 'lion');
var index = animals.indexOf('cat');
var index2 = animals.lastIndexOf('lion');
console.log('i',index);  //1
console.log('i2',index2);  //5
复制代码
  • findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。
var nums = [2, 4, 199, 80, 400, 30, 90];
var over = nums.findIndex(function(ele) {
	return (ele >= 100);
});
console.log('nums',nums[over]);  //199
复制代码
2.2 用concat()和apply()将一个二维数组扁平化
  • concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
    • arrayObject.concat(arrayX,arrayX,......,arrayX)
var fruitarray = [];
fruitarray[0] = ['stranwberry', 'orange'];
fruitarray[1] = ['lime', 'peach', 'banana'];
fruitarray[2] = ['tangerine', 'apricot'];
console.log('array',fruitarray.concat());
var newArray = fruitarray.concat.apply([], fruitarray);
console.log(newArray);
复制代码
function add(a, b) {
	console.log('add', this);
}
function sum(a, b) {
	console.log('sum', this);
}
add(1, 2);  //Window
sum(1, 2);  //Window

add.call(sum, 1, 2);  //sum(a, b)
sum.call(add, 1, 2);  //add(a ,b)
复制代码
  • arguments装换为数组, 返回的是数组,但是arguments本身保持不变
var arg = [].slice.call(arguments);
// [].slice.call(document.getElementsByTagName('li'));
复制代码
  • 借用别人的方法
var foo = {
	name: 'jack',
	showName: function() {
		console.log('this name:',this.name);
	}
}
var bar = {
	name: 'rose'
}
foo.showName();  //jack
foo.showName.call(bar);  //rose
复制代码
  • 实现继承
var Student = function(name, age, high) {
	Person.call(this, name, age);
	this.high = high;
}
复制代码
  • 封装对象保证this的指向
var _this = this;
_this.$box.on('mousedown', function()) {
	return _this.fndown.apply(_this);
}
复制代码
2.3 删除或替换数组元素
  • splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。
var animals = new Array('dog', 'cat', 'rabbit', 'pig', 'apple');
// 从数组删除元素
animals.splice(animals.indexOf('apple'), 1);
console.log(animals);  // ["dog", "cat", "rabbit", "pig"]
// 替换
animals.splice(animals.indexOf('pig'), 1, 'monkey');
console.log(animals);  //["dog", "cat", "rabbit", "monkey"]

// 使用循环和分割来替换和删除元素
var charSets = ["ab", "bb", "cd", "ab", "cc", "ab", "dd", "ab"];
while(charSets.indexOf('ab') != -1) {
	charSets.splice(charSets.indexOf('ab'), 1, '**');
}
console.log(charSets);  //["**", "bb", "cd", "**", "cc", "**", "dd", "**"]
while(charSets.indexOf('**') != -1) {
	charSets.splice(charSets.indexOf('**'), 1);
}
console.log(charSets); //["bb", "cd", "cc", "dd"]
复制代码
2.4 提取一个数组中的一部分
var animals = new Array('dog', 'cat', 'rabbit', 'pig', 'apple');
var newAnimals = animals.slice(1, 2);
console.log(animals);  //["dog", "cat", "rabbit", "pig", "apple"]
console.log(newAnimals);  //["cat"]
复制代码
2.5 对每一个数组元素应用一个函数
var charSets = ["ab", "bb", "cd", "ab", "cc", "ab", "dd", "ab"];
charSets.forEach(function(element, index, array) {
	if(element == 'ab') array[index] = '**';
});
console.log(charSets);  //["**", "bb", "cd", "**", "cc", "**", "dd", "**"]
复制代码
2.6 使用forEach()和call()遍历querySelectorAll()的结果
var cells = document.querySelectorAll('td + td');
[].forEach.call(cells, function(cell) {
	sum += parseFloat(cell.firstChild.data);
});
复制代码
2.7 对数组中的每个元素执行一个函数并返回一个新数组
  • 将一个十进制的数组转化为新的等价的十六进制数组
  • map()方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
  • 与forEach()不同,不会修改原数组,但是必须返回一个值
var decArray = [23, 3, 24, 45, 500, 9, 70];
var hexArray = decArray.map(function(ele) {
	return ele.toString(16);
});
console.log(decArray);  //[23, 3, 24, 45, 500, 9, 70]
console.log(hexArray);  //["17", "3", "18", "2d", "1f4", "9", "46"]
复制代码
2.8 创建一个过滤后的数组
  • filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
var charSet = ['**', 'bb', 'cc', '**', 'cd'];
var newArray = charSet.filter(function(element, index, array) {
	return element != "**";
});
console.log(newArray);  //["bb", "cc", "cd"]
复制代码
2.9 验证数组内容
  • 使用Array every()方法来检查每个元素是否符合给定的条件
  • some() 方法确保至少某些元素符合该条件
  • 区别:every()方法只要函数返回一个false值,处理就会结束,而some()方法会继续测试每个元素,直至返回true,此时,不再验证其他元素,即可返回ture
function testValue(element, index, array) {
	var testExp = /^[a-zA-Z]+$/;
	return testExp.test(element);
}
var elemSet = ['**', 123, 'adv', '-', 45, 'AAA'];
var result = elemSet.every(testValue);
var result2 = elemSet.some(testValue);
console.log(result);  //false
console.log(result2);  //true

var elemSet2 = ['aaa', 'animals', 'vvv'];
result = elemSet2.every(testValue);
result2 = elemSet2.some(testValue);
console.log(result);  //true
console.log(result2);  //true
复制代码
2.10 使用一个关联数组来存储表单元素名和值
  • keys() 方法返回一个新的Array迭代器,它包含数组中每个索引的键。
var elemArray = {};
var elem = document.forms[0].elements[0];
elemArray[elem.id] = elem.value;
var elemArray = {name: 'yt', age:25};
Object.keys(elemArray).forEach(function(key) {
	var value = elemArray[key];
	console.log(value);
});
复制代码

第3章 JavaScript的构建块

3种基本的创建函数方式:
  • 声明式函数
  • 匿名函数或函数构造函数
  • 函数字面值或函数表达式
3.1 放置函数并提升
  • 声明式函数,可以放置在代码中的任何位置;函数表达式,必须将其放置在使用函数的位置之前
// 在声明一个变量之前打印a
console.log('a', a);  //undefined
var a;
// 在声明一个变量并赋值
console.log('aa', aa);  //undefined
var aa = 1;

// 声明变量发生了提升,但是赋值并没有,赋值是在相应的位置发生的

// 声明式函数,在访问该函数之前,提升将确保把函数声明移动到当前作用域的顶部
console.log(mytest());  //success
function mytest() {
	return 'success';
}
// 使用函数表达式就会报错,变量可能声明了,但没有实例化,但是你的代码试图将这个变量当做一个函数对待
console.log(mytest2());  //TypeError: mytest2 is not a function
var mytest2 = function() {
	return 'success2';
}

复制代码
3.2 把一个函数当做参数传递给另一个函数
function otherFunction(x, y, z) {
	x(y, z);
}
// 可以像传递一个命名的变量一样,将一个函数作为参数传递给另一个函数
var param = function func(a1, a2) { alert(a1 + " " + a2); };
otherFunction(param, "Hello", "World");
复制代码
  • 函数式编程和JavaScript
    • 高阶函数: 一个函数接受另一个函数作为参数,或者返回一个函数,或者两者都具备
    • 函数式编程: 对应用程序复杂性进行抽象的一种方式,使用整齐、干净的函数调用替代了复杂的循环和条件语句(代码可读性高)
    • 比如:将数组中的所有数字相加
// for循环相加
var nums = [1, 34, 3, 15, 4, 18];
var sum = 0;
for(var i = 0; i < nums.length; i++) {
	sum += nums[i];
}
console.log('sum', sum);  //75

var nums2 = [1, 34, 3, 15, 4, 18];
var sum2 = nums2.reduce(function(n1, n2) {
	return n1 + n2;
});
console.log('sum2', sum2);  //75
复制代码
3.3 实现递归算法
  • 想要实现一个函数,它递归地遍历一个数组并返回一个反向的数组字符串
  • 缺点:递归很消耗内存
// 阶乘
function factorial(n) {
	return n == 1 ? n : n * factorial(n - 1);
}
console.log('阶乘', factorial(4));  // 24

// 斐波那契
var fibonacci = function(n) {
	return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
console.log('斐波那契', fibonacci(10));  //55

// 使用一个递归函数字面值来反转数组元素,从最大长度开始,每次迭代都将这个值自减
// 当为 0 时,返回字符串
var reverseArrary = function(x, index, str) {
	return index == 0 ? str : reverseArrary(x, --index, (str += " " + x[index]));
}
var arr = ['apple', 'orange', 'peach', 'lime'];
var str = reverseArrary(arr, arr.length, "");
console.log('str', str);  //lime peach orange apple

// 如果要反过来,按照顺序把数组连接为一个字符串
var orderArray = function(x, i, str) {
	return i == x.length - 1 ? str : orderArray(x, ++i, (str += x[i] + " "));
}

var numArr = [1, 2, 3, 4];
var numStr = orderArray(numArr, -1, "");
console.log('numStr', numStr);  //1 2 3 4 
复制代码
3.4 使用一个定时器和回调防止代码阻塞
  • 在程序的输出中,3个外围的 console.log() 立即被处理了
  • 队列中下一个事件是第一个 noBlock() 函数调用,其中又调用了 factorial() ,记录了其运行时候的活动,最后跟着回调函数的调用
  • 第二次同样地调用了 callBack()
  • 第三次调用 callBack() 的时候,回调函数中的调用针对第一次 callBack() ,并使用了第一次函数调用的最终结果:6
<script type="text/javascript">
function factorial(n) {
	console.log('n', n);
	return n == 1 ? 1 : n * factorial(n - 1);
}
function noBlock(n, callback) {
	setTimeout(function() {
		var val = factorial(n);
		if(callback && typeof callback == 'function') {
			callback(val);
		}
	}, 0);
}
console.log('Top of the morning to you');
noBlock(3, function(n) {
	console.log('first call ends width ' + n);
	noBlock(n, function(m) {
		console.log('final result is ' + m);
	});
});

var tst = 0;
for(var i = 0; i < 10; i++) {
	tst += i;
}
console.log('value of tst is ' + tst);
noBlock(4, function(n) {
	console.log('end result is ' + n);
});
console.log('not doing too much');
</script>
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言   第1使用JavaScript字符串   1.0简介   1.1连接两个或多个字符串   1.2连接字符串和另一种数据类型   1.3条件比较字符串   1.4在字符串中查找子字符串   1.5从一个字符串提取子字符串   1.6检查一个存在的、非空的字符串   1.7将一个关键字字符串分解为单独的关键字   1.8插入特殊字符   1.9处理textarea的单个行   1.10去除字符串末尾的空白   1.11左补充或右补充一个字符串   第2使用正则表达式   2.0简介   2.1测试一个子字符串是否存在   2.2测试不区分大小写的子字符串匹配   2.3验证社会安全号码   2.4找到并突出显示一个模式的所有实例   2.5使用新字符串替换模式   2.6使用捕获圆括号交换一个字符串中的单词   2.7使用正则表达式来去除空白   2.8使用命名实体来替代HTML标签   2.9搜索特殊字符   第3日期、时间和定时器   3.0简介   3.1打印出今天的日期   3.2打印出UTC日期和时间   3.3打印出一个ISO 8601格式日期   3.4把一个ISO 8601格式的日期转换为Date对象可接受的一种格式   3.5创建一个特定的日期   3.6规划未来的一个日期   3.7记录流逝的时间   3.8创建一个延迟   3.9创建重复性定时器   3.10使用带有定时器的函数闭包   第4使用Number和Math   4.0简介   4.1保持一个递增的计数   4.2把十进制数转换为一个十六进制值   4.3创建一个随机数生成器   4.4随机产生颜色   4.5把表中的字符串转换为数字   4.6把表中一列的所有数字加和   4.7在角度和弧度之间转换   4.8找到页面元素可容纳的一个圆的半径和圆心   4.9计算圆弧的长度   第5使用数组和循环   5.0简介   5.1循环遍历数组   5.2创建多维数组   5.3从数组创建一个字符串   5.4排序数组   5.5按顺序存储和访问值   5.6以相反的顺序存储和访问值   5.7创建一个新数组作为已有数组的子集   5.8在数组中搜索   5.9将一个多维数组扁平化   5.10搜索和删除或替换数组元素   5.11对每个数组元素应用一个函数   5.12对数组中的每个元素执行一个函数并返回一个新数组   5.13创建一个过滤后的数组   5.14验证数组内容   5.15使用一个关联数组来存储表单元素名和值   第6使用JavaScript函数构建重用性   6.0简介   6.1创建一段可重用的代码   6.2把单个数据值传递到函数   6.3把复杂的数据对象传递给函数   6.4创建一个动态运行时函数   6.5把一个函数当做参数传递给另一个函数   6.6实现递归算法   6.7创建能够记住其状态的函数   6.8使用一个通用的科里化函数提高应用程序性能   6.9使用缓存计算(Memoization)来提高应用程序性能   6.10使用匿名函数包装全局变量   第7处理事件   7.0简介   7.1检测页面何时完成载入   7.2使用Event对象捕获鼠标点击事件的位置   7.3创建一个通用的、可重用的事件处理函数   7.4根据修改的条件来取消一个事件   7.5阻止事件在一组嵌套元素中传播   7.6捕获键盘活动   7.7使用新的HTML 5拖放   7.8使用Safari方向事件和其他移动开发环境   第8浏览器模块   8.0简介   8.1请求Web页面访问者确认一项操作   8.2创建一个新的、下拉式的浏览器窗口   8.3找到关于浏览器的访问页面   8.4警告Web页面访问者将要离开页面   8.5根据颜色支持更改样式表   8.6根据页面大小修改图像尺寸   8.7在CMS模板页面中创建面包屑路径   8.8将一个动态页面加入书签   8.9针对后退按钮、页面刷新来保持状态   第9表单元素和验证   9.0简介   9.1访问表单文本输入值   9.2动态关闭或打开表单元素   9.3根据一个事件从表单元素获取信息   9.4当点击单选按钮的时候执行一个动作   9.5检查一个有效的电话号码   9.6取消表单提交   9.7阻止重复表单提交   9.8隐藏和显示表单元素   9.9根据其他表单选择修改一个选项列表   第10调试和错误处理   10.0简介   ……   第11访问页面元素   第12创建和删除元素和属性   第13使用Web页面空间   第14使用JavaScript、CSS和ARIA创建交互和可访问性效果   第15创建富媒体和交互应用程序   第16JavaScript对象   第17JavaScript库   第18通信   第19使用结构化数据   第20持久化   第21JavaScript创新用法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值