(001)JavaScript函数

十年开发系列之基础篇 - JavaScript

作者:曾林 

联系:1494445739@qq.com

网站:www.jplatformx.com

版权:文章未经同意请勿转载


 

一、JavaScript函数汇总

 

  • NaN: 不是一个函数,只是表示一个值。经常用来处理原本希望是数字型结果,但是却没有得到数字型结果的值。比如var total = 8 * init,加入init没有初始化,则total的值就是NaN。
  • isNaN(): 判断参数是否为数字
  • parseInt(): 将参数努力解析为整数类型
  • parseFloat(): 将参数努力解析为浮点类型
  • toFix(): 将入参四舍五入到指定位数。比如total.toFixed(2)。total变量的值如果是88的话,那么total.toFix(2)的结果就是88.00

 

二、备注

  • javascript中的变量或者函数定义是区分大小写的。
  • script标签中的type属性和language属性已经被w3c组织给废除了。
  • 如下代码:
window.onload = writeMsg;

function writeMsg() {
    document.getElementById("content").innerHTML = "hello world";
}

  注意,writeMsg和writeMsg()是不同的概念,因为这是两种不同的东西:带圆括号的函数名意味着正在调用这个函数;如果没有圆括号(就像这里的情况),就是将它赋值给事件处理程序,以便在此事件发生时运行它。

  • js异常处理代码:
try {
    throw new Error("message");
}catch(errMsg) {
    console.log(errMsg.message);
}finally {
console.log("execute always");
}
  • 对象探测。在编写脚本时,你可能希望检查浏览器是否有能力理解你要使用的对象。进行这种检查的方法称为对象探测。如下所示:
if ( document.getElementById("foo") ) {
    console.log("object exists.");
}else {
    console.log("object not exists);
}
  • 只有主窗口和iframe都来自同样的域,即不存在跨域问题的时候,那么才可以通过document.getElementById("frm")去获取contentWindow对象来操作iframe中的内容。注意,这里document.getElementById()并不等同于jQuery的$("#frm")。
  •  需要注意的是,带有src属性的<script>元素不应该在其<script>和</script>标签之间再包含额外的javascript代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。
  • HTML 4.01为<script>标签定义了defer属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载, 但是延迟执行。在现实当中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。如下代码所示:不过为了通用起见,还是将引用外部文件的script标签放在文件底部body内为好。
<script src="outer.js" defer="defer"></script>
  • ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符(注意,var是一个关键字),后跟变量名(即一个标识符),例如: var message;这行代码定义了一个名为message的变量,该变量可以保存任何类型的值(像这样未经过初始化的变量,会保存一个特殊的值——undefined)。如下: var message = "hi",在此,变量message中保存了一个字符串值“hi”。像这样初始化变量并不会把message标记为字符串类型;初始化的过程就是给该变量赋一个值那么简单。因此,可以在修改变量值的同时修改值的类型,比如message = 88;但是并不推荐这样操作。
  • 有一点必须注意,即使用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁。可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分隔开即可:
var message = "hi",
    found = false,
    age = 29;

     上面的例子定义并初始化了3个变量。同样由于ECMAScript是松散类型的,因而使用不同类型初始化变量的操作可以放在一条语句中来完成。虽然代码里的换行和变量缩进不是必须的,但这样做可以提高可读性。  

  • ECMAScript中有6种简单数据类型(也称为基本数据类型):undefined、null、object、number、string和boolean。鉴于ECMAScript是松散类型的,因此需要一种手段来检测给定变量的数据类型——typeof就是负责提供这方面信息的操作符。对一个值使用typeof操作符可能返回下列某个字符串:
  1. undefined —— 如果这个值未定义
  2. boolean —— 如果这个值是布尔值
  3. string —— 如果这个值是字符串
  4. number —— 如果这个值是数值
  5. object —— 如果这个值是对象或null
  6. function —— 如果这个值是函数
  • 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。如下面的例子所示:
if ( car != null ) {
    // 对car对象执行某些操作
}

   实际上,undefined值是派生自null值的,因此ECMAScript规定对它们的相等性测试要返回true:console.log( undefined == null )结果为true。尽管null和undefined有这样的关系,但它们的用途完全不同。如前所述,无论在什么情况下都没有必要把一个变量的值显示地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正的保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且有助于进一步区分null和undefined。

  •  js中数组的方法如下:push(), pop(), shift()和unshift()方法。其中push()和pop()方法实现类似于stack这样的数据结构,而shift()和unshift()方法则实现类似于quene这样的数据结构。另外两个方法为concat()函数和slice()函数,其中concat函数是用来连接数组,而slice()函数是从数组中挑出一系列的数据来形成新的数组。
posted @ 2015-04-04 23:44  jplatformx  阅读(150)  评论(0编辑  收藏  举报