task_13

前言#

这是js阶段的第一题,感觉不是很难,自己写了一个简单的,但是之后又看了一下得分最高的一个团队的代码,有值得学习的地方,自己写的过于简单,很多东西都没有考虑到。即使一个简单的题目,也有不同的解答方法。对我而言,并不在于是否求解,最重要的是思考和实践的过程,以及各种不同的解决方案,**在实践中遇到问题 进而引发思考 **从而学到更多。下面引入代码,进行分析

代码#

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>IFE JavaScript Task 01</title>
    <link href="http://csdnimg.cn/www/images/favicon.ico" rel="SHORTCUT ICON">
  </head>
<body>

  <label>请输入北京今天空气质量:<input id="aqi-input" type="text"></label>
  <button id="button">确认填写</button>

  <div>您输入的值是:<span id="aqi-display">尚无录入</span></div>

<script type="text/javascript">
(function() {
  /*自己封装函数*/

  var $ = function (id) {
    return document.getElementById(id);
  }
  var handler = function (){
    var num = parseInt($("aqi-input").value);
    if((!isNaN(num)) && (num>=0) && (num<=1000)){
      $("aqi-display").innerHTML = num;
    } else {
      alert($("aqi-input").value + " 不是有效的AQI数值,请重新输入0-1000的有效整数!")
    }
  }
  $("button").onclick = function(){
    handler();
  }
  
  $("aqi-input").onkeyup = function (event) {
    if(event.keyCode === 13){
      handler();
    }
  }
  
})();
</script>
</body>
</html>

知识点:

parseInt()#

parseInt()将字符串(String)类型转为整数类型。
方法 parseInt() 和 parseFloat() 在不能解析指定的字符串时就返回NaN。
parseInt(null) 和 parseFload(undefined) 返回都是 NaN

parseInt(string, [radix])  

string:必选参数,要被转换的字符串
radix:可选,数字的基数。取值范围在2~36。
返回值为Number类型
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

var str = "12.354";
var num = parseInt( str );
document.writeln( num ); // 12

str = "12";
num = parseInt( str );
document.writeln( num ); // 12

str = "23.52abc";
num = parseInt( str );
document.writeln( num ); // 23

str = "ab12张三";
num = parseInt( str );
document.writeln( num ); // NaN

// 十六进制
str = "0xff";
num = parseInt( str );
document.writeln( num ); // 255

// 八进制
str = "017";
num = parseInt( str );
document.writeln( num ); // 17

// 虽然是以0开头,但是八进制没有数字8,则采用十进制
str = "078";
num = parseInt( str );
document.writeln( num ); // 78

str = "111";
// 将该字符串视作二进制
num = parseInt( str, 2 );
document.writeln( num ); // 7

Number()#

Number() 函数把对象(Object)的值转换为数字。

Number(object)

Number返回的是数字,其参数是对象
如果对象的值无法转换为数字,那么 Number() 函数会返回 NaN。

var testStr1 = new String("5,000");  //字符串对象
alert("Number(testStr1) " + Number(testStr1)); //返回NaN  

在var testStr1 = new String("5,000"); 中,字符串中含有千位符,因此造成无法转换。
含有千位符的字符串,不能直接转换,要先去掉千位符,再进行转换。
通常使用此函数检测来自parseInt()和parseFloat()函数的返回值。

isNaN()函数#

isNaN( number )

注意:如果参数number不是Number类型,则isNaN()函数会将其强制转换为Number类型再进行判断。大多数其他类型的值无法强制转换为Number类型,则其转换结果为NaN,即isNaN()函数返回true。

当变量是空串时,isNaN()的返回值是false,但空串却不是数据。
这是因为isNaN()把空串或空格作0处理的

 
isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN('') /isNaN(null) //convert to 0 false
isNaN(true) //convert to 1 false
isNaN(null);      // false
isNaN(1);         // false

isNaN("1");            // fales "1" 被转化为数字 1,因此返回false
isNaN("SegmentFault"); // true "SegmentFault" 被转化成 NaN

JavaScript语言居然有两个表示"无"的值:undefined和null。
相似性:
undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。

if (!undefined) 
    console.log('undefined is false');
// undefined is false

if (!null) 
    console.log('null is false');
// null is false

undefined == null
// true

null 表示一个值被定义了,定义为“空值”;
undefined 表示根本被定义了但是没有被赋值

 var x;
console(x);//undefined,未赋值
console(y);//报错 y is not defined,未定义

根据C语言的传统,null被设计成可以自动转为0。

Number(null)
// 0

5 + null
// 5

最初设计:

Number(undefined)
// NaN

5 + undefined
// NaN

null是一个表示"无"的对象,转为数值时为0;
典型用法

(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null

undefined是一个表示"无"的原始值,转为数值时为NaN。

undefined == null
// true

典型用法,

  (1)变量被声明了,但没有赋值时,就等于undefined。
(2)  调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。

原文:http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

trim() 函数#

定义:
The trim() method removes whitespace from both sides of a string.

string.trim();

http://images2015.cnblogs.com/blog/874882/201611/874882-20161115085050701-83027958.png

IE9以上才支持!!!

当浏览器不支持该函数时,构造如下表达式

function myTrim(x) {
    return x.replace(/^\s+|\s+$/gm,'');
}

function myFunction() {
    var str = myTrim("        Hello World!        ");
    alert(str);
}

参考: http://www.w3schools.com/jsref/jsref_trim_string.asp

posted @ 2017-03-13 20:12  戈多的等待  阅读(171)  评论(0编辑  收藏  举报