最近想用nodejs做一个android调试脚本,由于nodejs其实可以理解成javascript的升级版。大学时用过JavaScript,这里还是要再复习下JavaScript的语法.它和C语言很类似,在心里上有一定学习优势,废话少说,开干。
到底行尾加不加分号“;”
关于这个问题,网上众说纷纭。网上说加不加分号会影响性能,毕竟要传输的数据变大了些。但是我看了一些开源仓库,有很多都是用了分号。为此后面的开发,我暂且都会在尾部加分号。
1.定义变量
就目前学习了解到javascript定义变量可以使用**let、var、const.**定义变量的名字需要遵循下面原则。
引用自
- 名称可包含字母、数字、下划线和美元符号
- 名称必须以字母开头
- 名称也可以 $ 和 _ 开头(但是在本教程中我们不会这么做)
- 名称对大小写敏感(y 和 Y 是不同的变量)
- 保留字(比如 JavaScript 的关键词)无法用作变量名称
- let:定义的变量生命周期仅限在let命令所i在的代码块内。如下面的aa为let在大括号内定义的变量,所以aa的可见性就在这个大括号内部。这个很像C语言的局部变量
执行结果可以看到,没有定义aa.现在aa对外部不可见。如果把let换成var,就不会报错了。{ let aa = 55; } console.log(aa);
K:\nodejs_demo\variable.js:4 console.log(aa); ^ ReferenceError: aa is not defined at Object.<anonymous> (K:\nodejs_demo\variable.js:4:13) at Module._compile (internal/modules/cjs/loader.js:1063:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10) at Module.load (internal/modules/cjs/loader.js:928:32) at Function.Module._load (internal/modules/cjs/loader.js:769:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47
- var:定义的变量在整个文件都是可见的。所以在后续开发中,建议都使用let定义变量
{ var aa = 55; } console.log(aa); 输出: λ node variable.js 55
- const:定义静态变量,后续不能修改的类型。如下面例子定义了静态便能量aa=4;但是后面又把它改成了33.这在编译就会报错。
const aa = 4; aa = 33; console.log(aa); #进行编译 aa = 33; ^ TypeError: Assignment to constant variable. at Object.<anonymous> (K:\nodejs_demo\variable.js:2:4) at Module._compile (internal/modules/cjs/loader.js:1063:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10) at Module.load (internal/modules/cjs/loader.js:928:32) at Function.Module._load (internal/modules/cjs/loader.js:769:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47
2.如何注释
像c语言一样可以使用
- /**/
- //
3.运算符
这里很多都是和C语言的类似
- 加减乘除
let a = 3;
let b = 6;
let sum = a + b;
let sub = b - a;
let mul = a * b;
let div = b/a;
console.log("sum=%d,sub=%d,mul=%d,div=%d,++a=%d,b++=%d,b=%d",
sum,sub,mul,div,++a,b++,b);
结果:
λ node add.js
sum=9,sub=3,mul=18,div=2,++a=4,b++=6,b=7
- 个等号 == 和 三个等号 === 的区别
更详细的可参考连接:
‘==’:等同 的意思, 两边值类型不同的时候,要先进行类型转换为同一类型后,再比较值是否相等
‘===’:表示只要值相等即可为真,而"==="则要求不仅值相等,而且也要求类型相同
if (a == 8)
console.log("this is %d",a);
if (b == 8)
console.log("b is %d",b);
if (b === 8)
console.log("2b is %d",b);
运行结果:
this is 8
b is 8
由于在实际开发过程中一般都是像比较2边的类型和值都一样,所以一般都是用===吧
- 位运算
下表引用自:https://www.w3school.com.cn/js/js_bitwise.asp
运算符 | 名称 | 描述 |
---|---|---|
& | AND | 如果两位都是 1 则设置每位为 1 |
| | OR | 如果两位之一为 1 则设置每位为 1 |
^ | XOR | 如果两位只有一位为 1 则设置每位为 1 |
~ | NOT | 反转所有位 |
<< | 零填充左位移 | 通过从右推入零向左位移,并使最左边的位脱落。 |
>> | 有符号右位移 | 通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。 |
>>> | 零填充右位移 | 通过从左推入零来向右位移,并使最右边的位脱落。 |
例子;
let a = 254;
console.log('a>>1=%d,a<<1=%d,a>>>1=%d',a>>1,a<<1,a>>>1);
运行结果:
a>>1=127,a<<1=508,a>>>1=127
4.字符串操作
let name = "armiwnd";
let data = " is a good boy"
let zuhe = name + data;
console.log("len=%d", name.length);
console.log("data:%s",name + data);
console.log(name + data);
console.log(zuhe.indexOf("good"));
console.log(zuhe.search("good"));
运行结果:
len=7
data:armiwnd is a good boy
armiwnd is a good boy
13
13
这里可以看到字符串可以直接拼接的,在实际应用中记住这一点很重要好。同时还有字符串查找方法,
- indexOf:能够查找到字符的偏移地址
- search:同样能返回偏移地址,但search支持正则表达式查找
4.循环语句
这里的循环语句可以说和C语言基本一致,按着C语言的方式来编码基本没有问题。下面是写的 for,for in,while,do while循环的例子。
同样可以在循环过程中使用break提前跳出循环。
let stu_name = ["armwind1","armwind2","armwnid3"];
//i是元素的索引
for (i = 0; i < stu_name.length; i++) {
console.log("for: name is %s",stu_name[i]);
}
//x是元素的索引
for (x in stu_name) {
console.log("for in:name is %s",stu_name[x]);
}
i = 0;
while(i < stu_name.length) {
console.log("while:name is %s",stu_name[i++]);
if (i === 2)
break;
}
i = 0;
do {
console.log("do_while:name is %s",stu_name[i++]);
} while(i < stu_name.length);
运行结果:
for: name is armwind1
for: name is armwind2
for: name is armwnid3
for in:name is armwind1
for in:name is armwind2
for in:name is armwnid3
while:name is armwind1
while:name is armwind2
do_while:name is armwind1
do_while:name is armwind2
do_while:name is armwnid3
5 swith case
同样和C语言的语法基本无差别,
let stu_name = ["armwind1","armwind2","boy"];
for (i in stu_name) {
switch(stu_name[i]) {
case "armwind": console.log("I'm armwind");break;
case "armwind1": console.log("I'm armwind1");break;
case "armwind2": console.log("I'm armwind2");break;
case "armwind3": console.log("I'm armwind3");break;
default: console.log("error variable");break;
}
}
运行结果:
I’m armwind1
I’m armwind2
error variable