本文只对我本人目前不理解的部份做笔记.
从c/c++转变过来不太容易理解的概念
- 变量即对象.所以可以这样:
var person={firstname:"John", lastname:"Doe", id:5566};
- 因为变量即对象.所以也可以将某函数赋值给某变量
var x = function (a, b) {return a * b};
and thenvar 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。
空格和折行无关紧要。声明可横跨多行:
1 2 3 4 5 6 7 8 9 10 |
var person={ firstname : "John", lastname : "Doe", id : 5566, fullName : function() { return this.firstName + " " + this.lastName; } }; |
对象属性有两种寻址方式:
1 2 3 4 |
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是弱类型)
## 自调用函数
函数表达式可以”自调用”。如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。通过添加括号,来说明它是一个函数表达式:
1 2 3 4 5 6 7 8 |
(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
:
1 2 3 4 5 6 7 8 9 |
x => { if (x > 0) { return x * x; } else { return - x * x; } } |
如果参数不是一个,就需要用括号()
括起来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 两个参数: (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构造函数,所有抛出的错误都是这个构造函数的实例。
1 2 3 |
var err = new Error('出错了'); err.message // "出错了" |
上面代码中,我们调用Error构造函数,生成一个err实例。
Error构造函数接受一个参数,表示错误提示,可以从实例的message属性读到这个参数。
常用方法
1 2 3 4 5 6 7 8 9 10 |
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代码块,表示不管是否出现错误,都必需在最后运行的语句。
1 2 3 4 5 6 7 8 9 10 11 12 |
function cleansUp() { try { throw new Error('出错了……'); console.log('此行不会执行'); } finally { console.log('完成清理工作'); } } cleansUp() // 完成清理工作 // Error: 出错了…… |
本文共 1 个回复