nodejs学习资料 - 第八节:ECMAScript语言整理

使用严格模式

定义

具有作用域特点

  • 全局
"use strict";
...

-局部

(function(){
  "use strict";
  ...
})();

规定

定义变量必须用 var
属性名、参数名 不能重名
禁用八进制表示数字,整数的第一位如果是0,表示这是八进制数
不能删除变量 delete
保留字不能用作标识符
禁止使用with语句
创设eval作用域
禁止this关键字指向全局对象
禁止在函数内部遍历调用栈
函数必须声明在顶层

这里可以推荐大家阅读下阮老师的博文
阮一峰 - Javascript 严格模式详解

注释

  • 单行用 \

  • 多行用

/* ... */

/*

*/

语句

一行一个语句
分号结尾
大括号表示代码段

关键字&保留字

  • 参考 ECMA-262 中定义

数据类型

变量

  • 弱类型 可以互相转换
  • 性质 包存值的占位符
  • 定义 用var来声明

数据类型分类

简单数据类型

  • Undefined 没有对象
  • NULL 空指针
  • String

单引号 双引号 完全相同
都可以转义 反斜杠 \ ,换行 \n
整个代码上下文统一

  • Number

Number.MAX_VALUE
Number.MIN_VALUE

检查是否能表示
isFinite(13213213)

var n = 1e

NaN 非法数字
isNaN('aaa') 是否非法数字
true
Number('1231') 数字转换

e 是科学计数法
var y=123e5; // 12300000
var z=123e-5; // 0.00123

parseInt 转整形
parseFloat 转浮点

  • Boolean

复杂数据类型

  • Object

表示值或函数方法
无序

var objs = new Object();
Object {}

var objs = {};

typeof

var a = 1e5
typeof(a)
"number"

操作符

一元操作符

++ --
前置 先计算和赋值一起操作
后置 计算后再赋值

int n = 1
++n
2
n++
2
n
3

位操作符

布尔操作符

与 或 非

alert(1&&2)的结果是2
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

alert(0||1)的结果是1
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

四则运算操作符

加、减、乘、除、求模

关系操作符

大于 等于 不等于 等于
全等于 === 会比较类型
全不等 !==

条件操作符

var a = (a>b ? a : b)

赋值操作符

=
+= -= *= /= %=
位运算 <<= 、>>= 、>>>=

逗号操作符

var a = 1, b = 2, c= 3

语句

条件

if(){}else{}else if{}

循环

while(true){}
do{}while(true)
for(var i =0;i<=numMax;i++){}
for(var key in 对象或数组){}

分支

switch(表达式、变量或值){ case 值或表达式: ... break; }

break 与 continue

with语句

with(req.session.user){
  log(name,sex);
}

label语句

var itemsPassed = 0;
var i, j;

top:
for (i = 0; i < items.length; i++){
    for (j = 0; j < tests.length; j++)
        if (!tests[j].pass(items[i]))
            continue top;
        itemsPassed++;
}

函数

定义

function sum(a,b){
  console.log('sum : ', a+b);
}

var sum2 = new Function(
  'a',
  'b',
  'console.log('sum : ', a+b);'
);

var sum3 = function(a,b){
  console.log('sum : ', a+b);
};

默认返回值

Undefined

保留字 arguments

function testArg(){
  console.log('arguments: ', arguments);
}

testArg(1,2,3,4,5);

参数个数

sum.length
2

特性

匿名
回调

变量

定义

var 方式是局部
默认是全局(不推荐)

ECMAScript 引用类型

Object 类型

var obj = {name:'aaa'}
obj.name
obj['name']

基本包装类型

基本类型自带的方法
如 String.toString()

Global 对象

属性
infinity nan undefined null

方法
eval() isFinite() isNan() ...

Math 对象

数学对象
Math.PI Math.E Math.SQRT2 Math.SQRT1_2 Math.min() Math.max()
Math.random()

数组

初始

var arr = new Array(3);
var arr = new Array('a', 'b', false);
var arr[4] = 'ab';

检查

arr instanceof Array
Array.isArray(arr)

转换与排序

var obj = {a:1, b:2, c:3, d:false};
Object.keys(obj);
Object.keys(obj).length;

// 分割
var str = 'a b c d';
str.split(' ');

// 打印
str.toString();
a,b,c,d
str.join('|');
a|b|c|d

// 排序
var arr = [11,2,33,66,55];
function compareAB(a,b){
  if(a > b){
    return 1;
  } else if(a === b){
    return 0;
  }else if(a < b){
    return -1;
  }
}
arr.sort(compareAB);
console.log(arr);

栈和队列操作

// 压入,加在尾端
arr.push(100,101);
// 弹出,尾端出栈
arr.pop();

// 队列,头部弹出
arr.shift();
// 队列,头部压入
arr.unshift(222);

其它

// concat 连接另一个数组,加入尾端
var arr1 = ['a1','a2'];
arr.concat(arr1)

// slice 取出
arr.slice(2,5); // 从2位置取到5,取出3个

// splice 删除、插入
arr.splice(1,1); // 从1位置删除1个
arr.splice(1,0,'a3','a4'); // 从1的位置 删除0个 插入 a3 a4

// 定位
indexOf();// 头部开始
lastIndexOf();// 尾部开始

// 加工函数,需要传入自定义函数
// every() 所有的成员都返回true 才是 true
arr.every(function(m){
  return m > 10;
});

// some() 有一个是true 就是 true
arr.some(function(m){
  return m > 10;
});

//filter() 返回值为true的组成一个新数组
arr.filter(function(m){
  return m > 10;
});

//map() 对数据处理 返回新数组
arr.map(function(m){
  return m + 10;
});

//forEach() 数组循环遍历
arr.forEach(function(m){
  console.log(m);
});

// reduce() prev 是上次的return 结果
arr.reduce(function(prev, cur, index, arr){
  return prev + cur;
});

// reduceRight() 是反序列操作

我的博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容