一、NodeJS 基础语法
目录1.1 安装
-
下载镜像地址:
-
开发工具
- Visual Studio Code
- 相关插件:
Node Exec
F8
: 运行js脚本F9
: 停止
1.2 注释
- 单行注释:
//
- 多行注释:
/*comment*/
str = 'hello' + /*comment*/ ' world'
console.log(str)
1.3 常量和变量
- 变量声明
var a = 100
: 声明一个全局或者函数内局部变量let b = 200
: 声明一个局部变量
- 常量声明
const c=300
: 常量必须声明的时候赋值,否则会报错,不可修改
变量声明完成以后没有赋值,会赋值为
undefined
var a
console.log(a) // undefined
a = 100
console.log(a) // 100
const b
console.log(b) // SyntaxError: Missing initializer in const declaration
1.4 数据类型
ES是动态语言,若类型语言,虽然先声明了变量,但是变量可以重置赋值成任意类型。若类型,不需要强制类型转换,会隐式类型转换
-
隐式类型转换
- 字符串+其他类型=字符串:
- 数字+其他类型(除undefined)= 数字
- undefined + 其他类型(除字符串) = Nan
- 逻辑运算,返回类型为短路是的类型
console.log(a = undefined + 'a', typeof(a)) // undefineda string console.log(a = null + 8, typeof(a)) // 8 number console.log(a = 8 + true, typeof(a)) // 8 number console.log(a = undefined + 8, typeof(a)) // NaN number console.log(a = null + true, typeof(a)) // 1 number console.log(a = undefined + true, typeof(a)) // NaN number console.log(a = true && 8, typeof(a)) // 8 number console.log(a = true && 'a', typeof(a)) // a string
NaN: Not a Number, 转换数字失败
1.5 字符串
使用单引号'
或者双引号"
引用起来的值就是字符串,ES6支持反引号.通常多行定义使用反引号,且反引号支持插值
a = `line1
line2
line3`
console.log(a)
输出:
line1
line2
line3
for (let i=1;i<10;i++) {
line = ''
for (let j=1;j<=i;j++) {
line += `${j}*${i}=${i*j} `
}
console.log(line)
}
输出:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
1.6 转义字符
1.7 数值
1.8 运算符
-
算术运算符
-
单目运算符:
i=0;let a = ++i+i+++i+++i
结果为1+1+2+3=7
++
--
-
比较运算符
= =
: 宽松相等,进行类型转换= = =
:严格相等,不进行类型转换
-
逻辑运算符
&&
||
!
-
位运算符
&
|
^
<<
>>
-
三元运算符 条件表达式?真值:假值
- ('3'> 30)?'yes':'no'
-
逗号运算符
-
其他运算符
-
instanceof
: 判断是否属于指定类型,必须明确类型,对象必须是new关键字声明创建的console.log('a' instanceof String) // false console.log(1 instanceof Number) //false a = new String('a') console.log(a instanceof String) // true b = new Number(1) console.log(b instanceof Number) // true
-
typeof
: 返回类型字符串 -
delete
: 删除对象或者对象的属性 -
in
: 指定的属性是否在对象内,返回bool值
let s = new Array('a', 'b', 'c') console.log('a' in s) // false console.log(0 in s) // true console.log(s[0]) // a console.log("length" in s) // true for (let i=0;i<s.length;i++) { console.log(s[i]) } // a // b // c delete s[1] for (let i=0;i<s.length;i++) { console.log(s[i]) } // a // undefined // c
1.9 生成器表达式
ES6开始支持生成器函数,每次调用next()方法返回一个对象,这个对象包含两个属性value, done。
function *inc() { let i = 0; let j = 5; while(true) { yield ++i; if(!--j) return 100 } } let gen = inc() for (let i=0;i<7;i++) { console.log(a = gen.next(), a.value) } // { value: 1, done: false } 1 // { value: 2, done: false } 2 // { value: 3, done: false } 3 // { value: 4, done: false } 4 // { value: 5, done: false } 5 // { value: 100, done: true } 100 // { value: undefined, done: true } undefined
-