首页 > 代码库 > JavaScript

JavaScript

变量

JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量。

JavaScript中代码注释:

  • 单行 //
  • 多行 /*  */
注意:此注释仅在Script块中生效。

JavaScript 中的数据类型分为原始类型和对象类型:

  • 原始类型
    • 数字
    • 字符串
    • 布尔值
  • 对象类型
    • 数组
    • “字典”
    • ...

特别的,数字、布尔值、null、undefined、字符串是不可变。

null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。undefined是一个特殊值,表示变量未定义。

常见数据类型

1、数字(Number)

JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。

转换:

  • parseInt(..)    将某值转换成数字,不成功则NaN
  • parseFloat(..) 将某值转换成浮点数,不成功则NaN

特殊值:

  •  NaN,非数字。可使用 isNaN(num) 来判断。
  • Infinity,无穷大。可使用 isFinite(num) 来判断。

 

2、字符串(String)

字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。

obj.length                           长度obj.trim()                           移除空白obj.split(delimiter, limit)          分割obj.search(regexp)                   从头开始匹配,返回匹配成功的第一个位置(g无效)obj.match(regexp)                    全局搜索,如果正则中有g表示找到全部,否则只找到第一个。obj.replace(regexp, replacement)     替换,正则中有g则替换所有,否则只替换第一个匹配项,                                     $数字:匹配的第n个组内容;                                     $&:当前匹配的内容;                                     $`:位于匹配子串左侧的文本;                                     $‘:位于匹配子串右侧的文本                                     $$:直接量$符号

 

3、布尔类型(Boolean)

布尔类型仅包含真假,与Python不同的是其首字母小写。

  • ==      比较值相等
  • !=       不等于
  • ===   比较值和类型相等
  • !===  不等于
  • ||        或
  • &&      且

 

4、数组

JavaScript中的数组类似于Python中的列表

常见功能:

obj.length          数组的大小 obj.push(ele)       尾部追加元素obj.pop()           尾部获取一个元素obj.unshift(ele)    头部插入元素obj.shift()         头部移除元素obj.splice(start, deleteCount, value, ...)  插入、删除或替换数组的元素                    obj.splice(n,0,val) 指定位置插入元素                    obj.splice(n,1,val) 指定位置替换元素                    obj.splice(n,1)     指定位置删除元素obj.slice( )        切片obj.reverse( )      反转obj.join(sep)       将数组元素连接起来以构建一个字符串obj.concat(val,..)  连接数组obj.sort( )         对数组元素进行排序

 

正则表达式

1、定义正则表达式

  • /.../  用于定义正则表达式
  • /.../g 表示全局匹配
  • /.../i 表示不区分大小写
  • /.../m 表示多行匹配
    JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容)

 

2、匹配

JavaScript中支持正则表达式,其主要提供了两个功能:

  • test(string)     检查字符串中是否和正则匹配
n = ‘uui99sdf‘reg = /\d+/reg.test(n)  ---> true # 只要正则在字符串中存在就匹配,如果想要开头和结尾匹配的话,就需要在正则前后加 ^和$
  •  exec(string)    获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。
获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。 非全局模式    获取匹配结果数组,注意:第一个元素是第一个匹配的结果,后面元素是正则子匹配(正则内容分组匹配)    var pattern = /\bJava\w*\b/;    var text = "JavaScript is more fun than Java or JavaBeans!";    result = pattern.exec(text)     var pattern = /\b(Java)\w*\b/;    var text = "JavaScript is more fun than Java or JavaBeans!";    result = pattern.exec(text) 全局模式    需要反复调用exec方法,来一个一个获取结果,直到匹配获取结果为null表示获取完毕    var pattern = /\bJava\w*\b/g;    var text = "JavaScript is more fun than Java or JavaBeans!";    result = pattern.exec(text)     var pattern = /\b(Java)\w*\b/g;    var text = "JavaScript is more fun than Java or JavaBeans!";    result = pattern.exec(text)

 

条件语句

JavaScript中支持两个中条件语句,分别是:if 和 switch

技术分享
if(条件){     }else if(条件){             }else{     }
if块
技术分享
switch(name){        case ‘1‘:            age = 123;            break;        case ‘2‘:            age = 456;            break;        default :            age = 777;    }
switch块

循环语句

JavaScript中支持三种循环语句,分别是:

var names = ["alex", "tony", "rain"]; for(var i=0;i<names.length;i++){    console.log(i);    console.log(names[i]);}

 

var names = ["alex", "tony", "rain"];for(var index in names){    console.log(index);    console.log(names[index]);}

 

while(条件){    // break;    // continue;}

 异常处理

try {    //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行}catch (e) {    // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。    //e是一个局部变量,用来指向Error对象或者其他抛出的对象}finally {     //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。}

 注:主动跑出异常 throw Error(‘xxxx‘)

函数

1、基本函数

JavaScript中函数基本上可以分为一下三类:

// 普通函数    function func(arg){        return true;    }          // 匿名函数    var func = function(arg){        return "tony";    }  // 自执行函数    (function(arg){        console.log(arg);    })(‘123‘)

 注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。

 

作用域

JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。

我们需要谨记以下几点:

  1. 所有的作用域在创建函数且未执行时候就已经存在
  2. 作用域在编译过程中已经生成了
  3. 提前声明的前提是后面后变量定义

银角有一篇很骄傲的文章,叫五句话搞定JavaScript作用域:

  1. JavaScript中无块级作用域
  2. JavaScript采用函数作用域
  3. JavaScript的作用域链
  4. JavaScript的作用域链执行前已创建
  5. 声明提前

 附上链接:http://www.cnblogs.com/wupeiqi/p/5649402.html 

 

闭包

闭包通常是一个自执行函数,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」.

由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。

function f2(){    var arg= [11,22];    function f3(){        return arg;    }    return f3;} ret = f2();ret();
setInterval(function(){   alert(123);}, 1000);   function f1(arg){   alert(arg);}f1(123);//做封装,闭包(function(arg){   alert(arg);})(123)

 

面向对象

JavaScript中没有类似于Python中的类,他的对象是由函数创建出来的.

function Foo (name,age) {    this.Name = name;    this.Age = age;    this.Func = function(arg){        return this.Name + arg;    }}  var obj = new Foo(‘alex‘, 18);var ret = obj.Func("sb");console.log(ret);

解释下上面的代码:

  • Foo充当的构造函数
  • this代指对象
  • 创建对象时需要使用 new
 
 

 

 

 

 

JavaScript