JavaScript 基础知识

5,229次阅读
一条评论

本文只对我本人目前不理解的部份做笔记.

从 c /c++ 转变过来不太容易理解的概念

  • 变量即对象. 所以可以这样:var person={firstname:"John", lastname:"Doe", id:5566};
  • 因为变量即对象. 所以也可以将某函数赋值给某变量 `var x = function (a, b) {return a * b};` and then `var z = x(4, 3);`
  • 函数中可以再包含函数
  • 可以有匿名函数(没有函数名的函数)
  • 没有函数重载, 只能覆盖, 所以给不同的参数调用不同的对像不现实
  • 没有所谓的入口函数
  • 每遇到一个换行表示代码结束, 不一定以 `;` 结束
  • 由于弱类型 `if(10==’10’)` 是成立的, 如果要判断类型, 则 `if(10===’10’)`, 另外 switch 都是在以 `===` 行为判断

JavaScript 对象

对象的定义

对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={firstname:"John", lastname:"Doe", id:5566};
上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。
空格和折行无关紧要。声明可横跨多行:

var person={
firstname : "John",
lastname  : "Doe",
id        :  5566,
fullName  : function()
    {return this.firstName + " " + this.lastName;}
};

对象属性有两种寻址方式:

name=person.lastname;
name=person["lastname"];
name=person.fullName();  // 括号不能少, 否则会是返回字符串 function () {return this.firstName + " " + this.lastName;}, 这点与 c ++ 有些像

函数的定义

最常规的方法 function double(x){return 2 * x;}

这种方法与 c ++ 很像, 只是在函数前需要加 function 来进行构造, 然后也不需要返回参数类型(javascript 是弱类型)
## 自调用函数
函数表达式可以 ” 自调用 ”。如果表达式后面紧跟 (),则会自动调用。
不能自调用声明的函数。通过添加括号,来说明它是一个函数表达式:

(function () {var x = "Hello!!";      // 我将调用自己})();

alert((function(x){return x*x;})(10)); // 提示 100

let 声明的变量

相当于 c 语言的 static 吧, 暂时理解为区域变量

箭头函数(Arrow Function) =>

相当于匿名函数x => x * x 等效于 function (x) {return x * x;}
箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的,只包含一个表达式,连 {...}return都省略掉了。还有一种可以包含多条语句,这时候就不能省略 {...}return

x => {if (x > 0) {return x * x;}
    else {return - x * x;}
}

如果参数不是一个,就需要用括号 () 括起来:

// 两个参数:
(x, y) => x * x + y * y

// 无参数:
() => 3.14

// 可变参数:
(x, y, ...rest) => {
    var i, sum = x + y;
    for (i=0; i<rest.length; i++) {sum += rest[i];
    }
    return sum;
}

如果要返回一个对象,就要注意,如果是单表达式,这么写的话会报错:x => {foo: x}
因为和函数体的 {…} 有语法冲突,所以要改为:x => ({foo: x})
另外, 箭头函数完全修复了 this 的指向,this总是指向词法作用域,也就是外层调用者 obj, 详细参见 google, 这里不写了, 暂时我也用不上.

错误处理 try/catch/finally 以及 throw

** node.js 中很多操作是异步的,try/catch 并不能捕获到错误, 需要注意 **

Error 对象

JavaScript 解析或执行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供一个 Error 构造函数,所有抛出的错误都是这个构造函数的实例。

var err = new Error('出错了');
err.message // "出错了"

上面代码中,我们调用 Error 构造函数,生成一个 err 实例。
Error 构造函数接受一个参数,表示错误提示,可以从实例的 message 属性读到这个参数。

常用方法

try {throw new Error('出错了!');
} catch (e) {console.log(e.name + ":" + e.message);
  console.log(e.stack);
}
// Error: 出错了!
//   at <anonymous>:3:9
//   ...

上面代码中,try 代码块一抛出错误(上例用的是 throw 语句),JavaScript 引擎就立即把代码的执行,转到 catch 代码块。可以看作,错误可以被 catch 代码块捕获。catch 接受一个参数,表示 try 代码块抛出的值。
try…catch 结构允许在最后添加一个 finally 代码块,表示不管是否出现错误,都必需在最后运行的语句。

function cleansUp() {
  try {throw new Error('出错了……');
    console.log('此行不会执行');
  } finally {console.log('完成清理工作');
  }
}
cleansUp()
// 完成清理工作
// Error: 出错了……
正文完
 0
评论(一条评论)