JavaScript实例2
来源:互联网 发布:mac谷歌翻墙教程 编辑:程序博客网 时间:2024/06/05 19:30
使用捕获圆括号交换一个字符串中的单词
我们可以接受一个带有名称和姓氏的输入字符串,并且交换名称,以便让姓氏先出现。
var name = "Abe Lincoln";var re = /^(\w+)\s(\w+)$/;var newname =name.replace(re,"$2, $1");var result = re.exec(name);var newname2 = result[2] + ","+ result[1];console.log(newname);//Lincoln, Abeconsole.log(newname2);//Lincoln, Abe
使用命名实体来替代HTML标签
把示例标签粘贴到Web页面中,并且转义该标记,打印出尖括号而不是进行内容进行。
var pieceOfHtm1 = "<p> This is a <span> paragraph</span></p>";pieceOfHtm1 =pieceOfHtm1.replace(/</g,"<");pieceOfHtm1 = pieceOfHtm1.replace(/>/g,">");console.log(pieceOfHtm1);输出:"<p> This is a <span> paragraph</span></p>"
把一个ISO 8601格式的日期转换为Date对象可接受的一种格式
需要把一个ISO 8601格式的日期字符串转换为可以用于创建一个新的Date对象的值。
var dtstr = "2014-3-04T19:35:32Z";dtstr = dtstr.replace(/\D/g," ");dtstr = dtstr.replace(/\s+$/,"");var dtcomps = dtstr.split(" ");dtcomps[1]--;var convdt = new Date(Date.UTC.apply(null,dtcomps));console.log(convdt.toString());//"Wed Mar 05 2014 03:35:32 GMT+0800 (中国标准时间)"
使用带有定时器的函数闭包
问题:想要提供一个带有定时器的函数,但是,想要直接把函数添加到定时器方法调用中。
解决方法:使用一个匿名函数作为setInterval()或者setTimeout()方法调用的第一个参数:
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>Interval</title> <style type="text/css"> #redbox,#yellowbox{ background-color: red; width: 50px; height: 50px; left: 50px; position: absolute; } #redbox{ background-color: red; } #yellowbox{ background-color: yellow; top: 100px; } </style></head><body> <div id="redbox" ></div><div id="yellowbox"></div> <script type="text/javascript"> window.onload= function(){ var x=0; var intervalId = setInterval(function(){ x+=5; var left = x+'px'; document.getElementById("yellowbox").style.left = left; console.log(document.getElementById("yellowbox").offsetLeft); if(document.getElementById("yellowbox").offsetLeft >300){ document.getElementById("yellowbox").style.left=0+'px'; x=0; } },100); var intervalId1 = null; document.getElementById("redbox").addEventListener('click', startBox, false); function startBox(){ if(intervalId1 == null){ var y = 100; intervalId1 = setInterval(function(){ y+=5; var left = y+"px"; document.getElementById("redbox").style.left = left; },100); }else{ clearInterval(intervalId1); intervalId1 = null; } } }; </script></body></html>
//黄色方块以100ms的间隔每次向右移动5个像素,红色的点击启动/暂停切换

把十进制数转换为一个十六进制值
var num = 255;console.log(num.toString(16));//ff
额外扩展:严格模式
‘use strict’或者 “use strict”作为脚本或者函数的第一行
当使用严格模式的时候,原来通常会被忽略的一次犯错,现在将导致一个错误
+ 在赋值的时候,变量名中的录入错误,将会抛出一个错误。
+ 通常赋值失败会很安静,现在会抛出一个错误。
+ 试图删除一个不能删掉的属性会失败
+ 使用非唯一性的属性名称会报错
+ 使用非唯一性的函数参数名称会报错
+ 严格模式还会提出其他的要求
+ 在严格模式中不支持八进制
+ eval()语句受到限制,并且不再支持with。
+ 当构建一个新的对象的时候,new是必须的,以保证this正确地工作。
把表中一列的所有数字加和
问题:想要将表中一累的所有数字加和
解决方案:遍历表中包好了数字值的类,将其转换为数字,并加和。
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>Accessing numbers in table</title></head><body> <table id ="table1"> <tr> <td>Washington</td> <td>145</td> </tr> <tr> <td>Oregon</td> <td>233</td> </tr> <tr> <td>Missouri</td> <td>833</td> </tr> <tr> <td>China</td> <td>522</td> </tr> </table> <script type="text/javascript"> var sum =0; var cells = document.querySelectorAll("td + td"); for(var i=0; i<cells.length ; i++){ sum+= parseFloat(cells[i].firstChild.data); } //将求和置于表尾 var newRow = document.createElement("tr"); newRow.style.background = "red"; var firstCell= document.createElement("td"); var firstCellText = document.createTextNode("sum:"); firstCell.appendChild(firstCellText); newRow.appendChild(firstCell); //带有总和的第二个单元格 var secondCell = document.createElement("td"); var secondCellText = document.createTextNode(sum); secondCell.appendChild(secondCellText); newRow.appendChild(secondCell); document.getElementById("table1").appendChild(newRow); </script></body></html>
运行结果

注意:querySelectorAll()返回的是一个NodeList而不是一个数组,而如果使用forEach()方法,则返回的是一个数组,且并forEach本身是数组的一个方法。
使用forEach()和call()遍历querySelectorAll()的结果
var cells = document.querySelectorAll("td + td");[].forEach.call(cells,function(cell){ sum+=parseFloat(cell.firstChild.data);});
在角度和弧度之间转换
var degress = 30;var radius = degress *(Math.PI/180);degress = radius *(180/Math.PI);console.log(radius);//0.5235987755982988console.log(degress);//29.999999999999996console.log(parseInt(degress));//29,向下取整console.log(parseInt(degress)+1);//30,向上取整
JavaScript数组
用contact和apply将一个两维数组扁平化
var fruitarray = [];fruitarray[0] = ['strawberry','orange'];fruitarray[1] = ['lime','peach','banana'];fruitarray[2] = ['tangerine','apricot'];fruitarray[3] = ['raspberry','kiwi'];//扁平化数组var newArray = fruitarray.concat.apply([],fruitarray);console.log(newArray);输出:["strawberry", "orange", "lime", "peach", "banana", "tangerine", "apricot", "raspberry", "kiwi"]
对每个数组元素应用一个函数
var charSets = ["ab","bb","cd","ab","cc","ab","dd","ab"];function replaceElement(element,index,array){ if(element == "ab") array[index] = "**";} charSets.forEach(replaceElement);console.log(charSets);输出["**", "bb", "cd", "**", "cc", "**", "dd", "**"]
forEach()方法:接受一个参数,即回调函数,该函数自身有3个参数,数组元素、元素的索引和数组,其中只有第一个参数是必须的。
map()方法:与forEach()传递一样的参数
var decArray = [23,255,122,5,16,99];var hexArray = decArray.map(function(element){ return element.toString(16);});console.log(hexArray);//["17", "ff", "7a", "5", "10", "63"]
与forEach()方法不同的是map()方法的结果是一个新的数组,而不是修改原有的数组,所以使用forEach的时候不会返回一个值,但是使用map的时候必须返回一个值。
filter()方法:与forEach传递的值一样,将返回值为true的元素添加到新的数组中
var charSets = ["**", "bb", "cd", "**", "cc", "**", "dd", "**"];var newArray = charSets.filter(function(element){ return (element != "**");})console.log(newArray);//["bb", "cd", "cc", "dd"]
every()方法,检查每个元素符合给定的条件
some()方法:确保至少某些元素符合该条件
dict模式
创建一个空的原型的对象,以避免已有的属性可能会搞乱应用程序,而不是创建一个标准的对象
var newMap = {};var key = 'toString';console.log(key in newMap);console.log(newMap[key]);var secondMap = Object.create(null);console.log(key in secondMap);secondMap[key] = "something diff";console.log(key in secondMap);console.log(secondMap[key]);输出truefunction toString() { [native code] }falsetrue"something diff"
使用 解构赋值简化代码
问题:想要将数组元素的值赋给几个变量,但是确实不想单独地赋值每一个值
解决方案:使用解构赋值来简化数组赋值
var stateValues =[459,144,96,34.0,14];var [Arizona,Missouri,Idaho,Nebraska,Texas,Minnesota] = stateValues;console.log(Missouri);//144
JavaScript的构建块
有3种基本的方式可以创建函数:
+ 声明式函数
+ 匿名函数或函数构造函数
+ 函数字面值或函数表达式
放置函数并提升
在JavaScript中,所有的变量声明都会移动或提升到当前作用域的顶部,这是指声明不是调用
先调用后声明会出现如下情况
console.log(a);//undefined;var a;console.log(a);//undefined;var a = 1;
上面情况发生的原因在于 变量的声明得到提升 而赋值没有提升,赋值是在其相应位置上发生的。
那么针对函数,这样会有什么情况出现呢?
+ 如果你创建的是一个 声明式函数,则在访问函数前,提升将确保函数声明移动到当前作用域的顶部
console.log(test());//"hello"function test(){ return 'hello';}
- 如果创建的是一个函数表达式,如下,会引发错误,因为变量test可能声明了,但是还未实例化,而代码试图将没有实例化的变量当做一个函数对待。
console.log(test());//会引发错误var test = function(){return 'hello';}
- JavaScript实例2
- JavaScript实例
- JavaScript 实例
- javascript实例
- javaScript实例
- javascript实现的2级连动实例
- javascript实现的2级连动实例
- JavaScript入门<2>JavaScript常用内置对象实例详解
- javascript经典代码实例
- javascript 小实例
- javascript基础实例
- javascript 弹出div实例
- 107个javascript实例
- JavaScript OO简单实例
- javascript校验实例
- javascript ajax 实例
- javascript使用json(实例)
- javascript表单处理实例
- Intellij Idea 初体验
- Java 高级数据结构 —— Properties
- Python中的函数注意事项
- 题目1032:ZOJ
- 阿里和亚马逊的云战争:云计算正在成为新一代商业基础设施
- JavaScript实例2
- Calendar类实现打印日历
- Android-Service
- ShaderLab学习笔记
- ES6标准入门(第二版)pdf
- ArrayList源码解析
- Linux系统iscsi服务
- 第三章 授权(三)Authorizer、PermissionResolver及RolePermissionResolver(自定义Realm+JDBCRealm)
- 九度OJ:1054