这本书已经读了几章了,想着试试能不能做出点东西,就简单的练了把手。觉得对于初学者,自己试着练练,效果还不错的。

挥刀要从轻的开始,起初的原因是和同事谈起曾经的逝水年华(小时候干的坏事)时说起了曾经的一篇课文,讲的是一个小朋友如何巧妙地从1到100累加起来的,猛然间我觉得可以用js算出来,说干就干。

function add(){
for(var i = 1; i <= 100; i ++){
var sum = 0;
sum += i;
}
alert(sum);
}
add();

满心期待的点击运行,正打算欢呼之时,看到结果的那一刻整个人都石化了。结果居然是100,真是奇怪,仔细检查了下代码,发现犯了一个低级的错误,原来把sum声明在循环内了,这就相当于每循环一次,sum都被重新赋值为0,导致叠加变为了 sum = 0 + i ,并不是期望的那样,马虎。改吧,于是乎,把sum声明到了循环体外面,再次运行带到了想要的 5050 。

不过这并不能让我有太多的成就感,我们还可以把它变得更加智能。比如我想从2累加到10,那应该怎么办?想了下,加个参数就好了。

function add(a,b){
var sum = 0;
for(var i = a; i <= b; i ++){
sum += i;
}
alert(sum);//54
}
add(2,10);

在纸上算了算,确实正确。但是这样我只能在代码中进行修改,能不能把它放到界面上,我想让它变得更加有活性,开始值和结束值要按照我的心情来,想让它是多少就是多少,写程序就是要这么任性。

<input type = "text"  id = "sum">
<input type = "button" value = "叠加" id = "click">

简单的做了一个文本框和一个点击按钮,期望在文本框中输入不同的数字,然后点击得到累加的结果。

var sum = document.getElementById('sum');
var click = document.getElementById('click');
click.addEventListener('click',function add(){
var number = sum.value.split(",");//将输入的内容转化为数组(默认输入的2个数字用“,”来隔开,比如输入1,3)
var c = 0;
var a = number[0];
var b = number[1];
for(var i = parseInt(a); i <= parseInt(b); i ++){
c +=i;
}
alert(c);
},false);

再写的时候第一想到的是获取到文本框中的字符串,然后再将其转换为数组,通过数组拿到想要的值。如果是空格隔开2个数字的话,可以在用“||”继续添加条件,目前我只能做到特定符号隔开的情况,对于随意输入还没有想到很好的解决办法。对于获得文本框中的的数字,可以在split()中使用正则匹配,比如还是“,”隔开的,改为“/,/”,就可以了。当然也可以用正则进行匹配。

var sum = document.getElementById('sum');
var click = document.getElementById('click');
click.addEventListener('click',function add(){
var pattern = /(\d+),(\d+)/g;
var c = 0;
if(pattern.test(sum.value)){
var a = RegExp.$1;
var b = RegExp.$2;
}
for(var i = parseInt(a); i <= parseInt(b); i ++){
c +=i;
}
alert(c);
},false);

简单的解释下,\d是是匹配的时候查找数字,\d+是匹配至少包含一个数字的字符串,(\d+)是一个捕获组,为了方便进行捕获和赋值。test()函数从字面意思也可看出他是为了检测是否匹配,返回值为true和false,RegExp.$1是获取第一个捕获组,RegExp.$2获取第二个捕获组,这样就很容易得到“,”两边的数字了。

其实无论是用split()还是使用正则,思路是一样的,可能还有更简单的方法,但是目前还没有想到。

这个也可以再继续往下去延伸,比如说我得到这些值后,不去做累加,而是做一些判断条件,就像登录和注册一样。我觉得这样在学习的过程中可以去联想下各种场景,试着写写,不会的就去查,进展可能会快一些。

《javascript高级程序设计》读书小延伸的更多相关文章

  1. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  2. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  3. Javascript高级程序设计读书笔记(第六章)

    第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...

  4. JavaScript高级程序设计-读书笔记(7)

    第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...

  5. javascript高级程序设计 读书笔记2

    第五章 引用类型 对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起.描述的是一类对象所具有的属性和方法.对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建 ...

  6. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  7. JavaScript高级程序设计 读书笔记 第一章

    JavaScript是一种专门为与网页交互而设计的脚本语言 JavaScript实现 ECMAscript---核心 DOM---文档对象模型 BOM---浏览器对象模型

  8. Javascript高级程序设计读书笔记(第二章)

    第二章  在HTML中使用Javascript 2.1<script>元素 延迟脚本(defer = "defer")表明脚本在执行时不会影响页面的构造,脚本会被延迟到 ...

  9. JavaScript高级程序设计-读书笔记(6)

    第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JS ...

  10. JavaScript高级程序设计-读书笔记(5)

    第13章 事件 1.事件流 事件流描述的是从页面中接收事件的顺序.IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕获流. (1)事件冒泡,即事件开始时由最具体的元 ...

随机推荐

  1. ui-grid表格怎么实现内容居中

    这次是思想落后了,只关注怎么使用原生的ui-grid样式来实现这一需求,后来发现可以通过此列的cellTemplate来为列指定内容,从而可以使用css调整样式. ps:其实有时候换种思路,豁然开朗. ...

  2. 【bzoj5070】危险的迷宫 费用流

    题目描述 JudgeOnline/upload/201710/55.doc 输入 第一行是两个整数A与B(1≤A,B≤10),中间用空格分隔,表示该迷宫是A行B列的. 第2行至第A+1行,每行有B个1 ...

  3. Android开发工具常用快捷键大全

    Android开发中常用的开发工具有android studio和eclipse两种,下面小编整理了一些这两种开发工具中常用的快捷键,使用这些快捷键,你的android编程将事半功倍. android ...

  4. C#中的String.Format方法

    定义String.Format是将指定的String类型的数据中的每个格式项替换为相应对象的值的文本等效项.(1)string p1="xiaomeng";string p2=&q ...

  5. 【转】如何解决每次打开office2010都会出现正在配置以及使用KMS

    转自:http://jingyan.baidu.com/article/90895e0fb1525964ec6b0bb5.html 一.使用mini-KMS_Activator_v1.2_Office ...

  6. Ural 1297 Palindrome(Manacher或者后缀数组+RMQ-ST)

    1297. Palindrome Time limit: 1.0 second Memory limit: 64 MB The “U.S. Robots” HQ has just received a ...

  7. 【题解】NOI2009管道取珠

    又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...

  8. [BZOJ1449] [JSOI2009]球队收益 / [BZOJ2895] 球队预算

    Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Cix^2+Diy^2,Di<=Ci.(赢得多,给球员的奖金就多嘛) ...

  9. bzoj2827: 千山鸟飞绝 平衡树 替罪羊树 蜜汁标记

    这道题首先可以看出坐标没有什么意义离散掉就好了. 然后你就会发现你要每次都更改坐标,而一旦更改受影响的是坐标里的所有数,要是一个一个的改,会不可描述. 所以换个视角,我们要找的是某只鸟所到每个坐标时遇 ...

  10. poj3683 2-sat Priest John's Busiest Day

    Description John is the only priest in his town. September 1st is the John's busiest day in a year b ...