javascript(ES6)-语法学习

最近想用nodejs做一个android调试脚本,由于nodejs其实可以理解成javascript的升级版。大学时用过JavaScript,这里还是要再复习下JavaScript的语法.它和C语言很类似,在心里上有一定学习优势,废话少说,开干。

到底行尾加不加分号“;”

关于这个问题,网上众说纷纭。网上说加不加分号会影响性能,毕竟要传输的数据变大了些。但是我看了一些开源仓库,有很多都是用了分号。为此后面的开发,我暂且都会在尾部加分号。

1.定义变量

就目前学习了解到javascript定义变量可以使用**let、var、const.**定义变量的名字需要遵循下面原则。
引用自

  • 名称可包含字母、数字、下划线和美元符号
  • 名称必须以字母开头
  • 名称也可以 $ 和 _ 开头(但是在本教程中我们不会这么做)
  • 名称对大小写敏感(y 和 Y 是不同的变量)
  • 保留字(比如 JavaScript 的关键词)无法用作变量名称
  • let:定义的变量生命周期仅限在let命令所i在的代码块内。如下面的aa为let在大括号内定义的变量,所以aa的可见性就在这个大括号内部。这个很像C语言的局部变量
    {
    	let aa = 55;
    }
    console.log(aa);
    
    执行结果可以看到,没有定义aa.现在aa对外部不可见。如果把let换成var,就不会报错了。
    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语言一样可以使用
  1. /**/
  2. //

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值