JavaScript权威指南--基础篇2

来源:互联网 时间:2017-01-22

JavaScript权威指南–基础篇2
一.知识点
1.try-catch的用法

  • 语法:(备注:JavaScript 1.5中已经支持多catch语句)
try { //在此运行代码}catch (e if e instanceof ReeferenceError){ //在此处理引用错误}catch (e){ //在此处理其他余下错误}finally{//可选 //无论是否出现异常,最后执行}

多catch语句执行顺序类似if-else语句

  • 来看下几个例子:

①输出一个未定义的变量a

console.log(a);//报错Uncaught ReferenceError: a is not definedconsole.log(111);//未执行执行结果:报错了,且不向下执行语句。。。试一试try-catch语句:function my() { try{//试一下 console.log(a); }catch(e){//抓住异常 console.log("a未定义"); } console.log(111);}my();

控制台输出:此时抛出异常被catch抓住输出,且不影响下面语句执行。

②第二个栗子,当不小心把函数名称(alert)打错时,抛出异常,便于查看错误。

function message(){ try { adddlert("Welcome guest!") }catch(e){ console.log(e.description); console.log(e); }}

输出结果:

2.数字类型转字符串有3种方法。分别是toFixed()、toExponential()、toPrecision()。为了吃透,来看看下面的栗子(很好消化,别怕):

var num =123931.2345;var a = num.toFixed(2);//小数点后面2位var b = num.toExponential(4);//指数,小数点后有效位4位var c = num.toPrecision(4);//指数,有效位数4位console.log(typeof num);//numberconsole.log(typeof a);//stringconsole.log("a=",a);//a= 123931.23console.log(typeof b);//stringconsole.log("b=",b);//b= 1.2393e+5console.log(typeof c);//stringconsole.log("c=",c);//c= 1.239e+5

4.包装对象

  • 定义:存取字符串、数字、布尔值的属性时所创建的临时对象称作包装对象。
s.len = 4;//创建了一个包装对象,随即将销毁这个对象,不会被继续保留下去var t = s.len;//此时s的len属性已被销毁console.log(t);//undefined

5.声明提前–这个也挺有趣的,即在JavaScript里变量在声明之前就可用。

  • “声明提前”这步操作是在JavaScript引擎的预编译时进行的,是在代码运行之前。且看下面这段代码,多尝试动手哦:)
aa();//声明提前,输出:lfunction aa(){//声明式函数,没有分号 var ss = "l"; console.log(ss);}

6.函数作用域(function scope)

  • 定义:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。
  • 定义太饶舌,来看个例子吧:)
var scope = "global";//全局变量function f(){ console.log(scope);//undefined var scope = "local";//变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的 console.log(scope);//local}f();
  • 不少小伙伴可能有疑问了,诶?第一句console怎么不输出“global”啊?哈哈,我一开始也和你一样。来看看解释哈:由于函数作用域的特性,局部变量在这个作用域内均是有定义的,故局部变量会覆盖掉同名全局变量,但是,但是,局部变量只有在执行到var语句的时候,局部变量才被赋初始值。你明白了吗?

7.不可变的原始值和可变的对象引用

  • 原始值(数字、字符串、布尔值、null和undefined)是不可更改的,这个不可更改是指值不可更改,比如数字“1=2;hello=world;”这明显是行不通的。来看下这个例子:
var a = 1;console.log(a);//1a = 2;console.log(a);//2
有的童鞋可能会说了,“a=2你这不就更改原始值了嘛!”非也,a=2更改的是变量a的值,而不是把1这个值改变了。注意区分值和变量的概念,1是值,即所说的原始值,而a是变量,我讲清楚了吗?
  • 可变的对象(包括数组和函数),它们的值是可以修改的。且看例子:)
var o = { x:1 };o.x = 2;//通过修改属性x的值更改对象oo.y = "hello";//二次更改o,增加y属性console.log(o);//Object {x: 2, y: "hello"}来个扩展,比较数组相等:)var a = [1,2],b = [1,2];console.log(a===b);//false,这样比较是错误的//比较两个数组是否相等的正确姿势:function equalArrays(a,b) {//如果想比较数组,则必须比较它们的元素 if(a.length!=b.length) return false; for(var i=0;i<a.length;i++){ if(a[i]!=b[i]) return false; } return true;}console.log(equalArrays(a,b));//true

8.对象转字符串-toString()方法,对象转数字-valueOf()方法

var o = { x:1 };o.x = 2;o.y = "hello";console.log(o.toString());//[object Object]var a = [1,2,3,4];console.log(a.toString());//"1,2,3,4"var d = new Date(2017,1,22);console.log(d.valueOf());//1487692800000

相关阅读:
Top