掌握Javascript(二)

本文介绍Javascript的基本语法。


变量

let name = ‘kelemi’;

// 以let开头,以分号结尾

let name;

// 也可以不用初始变量值

// 变量名一般规则建议:

// 1.命名不能用保留字,比如 if

// 2.命名要有意义,比如a,b 不太好

// 3.不能以数字开头,比如 1name

// 4.不能包含空格和连字号 –

// 5.大小写敏感

let firstName = ‘chen’;

let lastName = ‘yongping’;

// 变量用的是驼峰命名,第一个单词首字小写,以后单词首字大写


常数

const interestRate = 0.3

// const表示常数,初始化后不能改变

// 如果后续再执行 interestRate = 0.5 将出错


值类型

在Javascript中,有两种类型,一种是值类型,另一种是引用类型。

// 值类型包括 String,Number,Boolean,undefined,null

let name = ‘chen’;// String类型

let age = 30; //Number类型

let isApproved = false; //Boolean类型

let firstName;

// 未初始化就是undefined类型

// 当然也可以直接赋类型 let firstName = undefined,一般很少这么声明

let selectedColor = null; //null类型用于清空值

在ES6中,还有一种类型是 Symbol。

动态类型

变量会根据赋值的不同变换类型。

console.log(typeof (name));

// 输出string

name = 30;

// 重新赋值为30

console.log(typeof (name));

// 现在类型变成了number

console.log(typeof (isApproved));

// boolean

console.log(typeof (firstName));

// 输出 undefined

console.log(typeof (selectedColor));

// 注意 null的类型是 “object”

另外,Javascript不分整数与浮点数,都是number类型。


Object(对象)

Javascript中的引用类型有三种:Object(对象),Array(数组),Function(函数)

先来看Object:

let person = {

    name: ‘kelemi’,

    age: 18

};

// 以上定义了一个对象,有两种方法访问点引用或方括号引用

person.name = ‘chen’;

// 用点引用方法重新赋值变成了 chen

console.log(person.name)

person[‘name’] = ‘huang’;

// 用方括号方式赋值

console.log(person.name)

//用方括号有时比较灵活,可以动态赋值

let selection = ‘name’;

person[selection] = ‘可乐米’

console.log(person.name)


Arrays(数组)

let selectColors = [‘red’, ‘blue’];

console.log(selectColors);

// 输出数组[‘red’, ‘blue’]

console.log(selectColors[0]);

// 输出 red,下标从0开始

Javascript是一种动态语言,运行时类型和长度都是可变的,比如可以直接增加一个元素:

selectColors[2] = ‘green’;

// 这样数组就变成了3个元素了。

// 各元素类型不必一样,如:

selectColors[2] = 1;

// 检查一下类型

console.log(typeof (selectColors))

// 输出类型是 object

// 类似Object,可以用点属性访问,只是这些属性未明确定义而已。如length等很多可用的属性。

console.log(selectColors.length)


Functions(函数)

function green() {

    console.log(“Hello World”);

}

// 函数体大括号后面不用跟分号

green(); //调用

// 参数传递

function green(name, lastName) {

    console.log(“Hello ” + name + ‘ ‘ + lastName)

}

green(‘chen’, ‘yongping’);

// 输出 Hello chen yongping

green(‘chen’);

// 输出:Hello chen undefined,只传递一个参数,另一个相当于传的是undefined

函数一般有两种作用,执行某些操作,以及计算并返回值。前面是执行一些操作,下面我们来看返回值。

function square(number) {

    return number * number;

    // return是保留字,返回给调用者

}

console.log(square(2))


运算符

Javascript中操作有算术运算符、赋值运算符、比较运算符、逻辑运算符、位元操作符,下面分别介绍。

算术运算符

let x = 10;

let y = 3;

console.log(x + y);//13

console.log(x – y);//7

console.log(x * y);//30

console.log(x / y);//3.3333333333333335,除

console.log(x % y);//1,余

console.log(x ** y);//1000,冥

console.log(++x);//11,先计算先显示

// console.log(x++); //10,先显示后计算

// console.log(x–);// 10

// console.log(–x);//9

赋值运算符

let x = 10;

x = x + 10;

// 等同于 x+=10;

x = x * 3

// 等同于x*=3

比较运算符

let x = 1;

console.log(x > 0);//true

console.log(x >= 1);//true

console.log(x < 1);//false

console.log(x >= 1);//true

console.log(x === 1);//true

console.log(x !== 1);//false

相等比较运算符

您是否注意到,前面比较是否相等的运算符是个等号,这里再讲一下两个等号:==

三个等号 === 表示是绝对相等,表示类型和值都相等,比如:

console.log(1 === 1);//true

console.log(‘1’ === 1);//false

而二个等号 == 表示只要值相等即可,会将右边的转换成左边的类型,再比较值,只要相等就是 true。比如:

console.log(1 == 1);

console.log(‘1’ == 1);

console.log(true == 1);

// 前面三句均输出 true

实际开发过程中,一般用三个等号较多,确保是真的相等。

三元运算符

let point = 90;

let type = point > 100 ? “gold” : “silver”;

// 用冒号分隔,表达式为true选冒号前的,为false的话选冒号后面的

console.log(type);//输出silver,因为90没有大于100,为false

逻辑运算符

逻辑运算符包括:

  • &&,表示与
  • ||,表示或
  • !,表示非

let x = true;

let y = true;

console.log(x || y);//true

console.log(x && y);//true

console.log(!y);//false

看个实际例子:

let highIncome = false;

let goodCreditScore = false;

let eligibleForloan = highIncome || goodCreditScore;

// 符合条件的要么是高收入,要么是征信好

console.log(‘Eligible’, eligibleForloan);

let applicationRefused = !eligibleForloan;

console.log(‘Application Refused ‘, applicationRefused)

在非布尔值中进行逻辑运算

逻辑运算的结果不一定是布尔值,取决于运算的数据

console.log(false || true); //true

console.log(false || ‘kekemi’); // 输出’kelemi’

console.log(false || 1); // 输出1

console.log(false || 1 || 2);

//输出1,这是短路现象,解释引擎看到1就返回,不管后面是什么

Javascript中有些类假 Falsy,包括:

  • undefined
  • null
  • 0
  • false
  • NaN,表示不能返回数字的运算值

除了这些类假,其它都是类真。来看个实际例子:

let userColor = ‘red’;

let defaultColor = ‘blue’;

let currentColor = userColor || defaultColor;

console.log(currentColor)

// 输出 ‘red’

// 如果userColor未初始化,则会输出 ‘blue’

// 这是一个强大的功能,用户要是没有选择颜色就用默认的颜色,刚好利用类假的特性

位元运算符

位元运算符包括:

  • |,表示位或
  • &,表示位与

console.log(1 | 2); // 输出3,相当于 00000011

console.log(1 & 2); // 输出0,相当于 00000000

来个读写控制的例子:

// 假设:

// 读表示 00000100

// 写表示 00000010

// 执行表示 00000001

const readPermission = 4;

const writePermission = 2;

const executePermission = 1;

let myPermission = 0;

myPermission = myPermission | readPermission | writePermission;

let message =

    (myPermission & readPermission) ? ‘yes’ : ‘no’;

// 判断是否有读权限

console.log(message)

运算符优先级

let x = (2 + 3) * 4

// 括号里选运算,然后冥,乘除,加减等

console.log(x)


If…else语句

Javascript中有两种条件句式:

  • if…else
  • switch…case

先看if…else:

let hour = 20;

if (hour >= 6 && hour < 12) {

    console.log(“Good morning”);

    // 只有一句也可以去掉大括号

}

else if (hour >= 12 && hour < 18)

    console.log(“Good Afternoon”);

else

    console.log(“Good evening”);


Switch…case语句

let role = “guest”;

switch (role) {

    case ‘guest’:

        console.log(‘Guest User’);

        break;

    // 跳出,否则后面语句还执行

    case ‘modorator’:

        console.log(‘Modorator User’);

        break;

    default:

        console.log(‘Unknown user’)

}

完全可以用if…else代替,switch…case有点过时了


For循环

循环有以下几种:

  • for
  • while
  • For…in
  • For…of

先看for:

for (i = 0; i < 5; i++) {

    // for分三段,第一段是初始化,第二段是比较,第三段等完成循环就执行一下

    console.log(“Hello world”)

}


While循环

let i = 0;

while (i < 5) {

    if ((i % 2) !== 0)

        console.log(i);

    // 取奇数

    i++;

}


Do…while循环

这种循环用得不多。

let i = 0;

do {

    if (i % 2 !== 0)

        console.log(i);

    i++;

} while (i <= 5)

// 与while循环区别是Do…while至少会执行一次,哪怕不满足条件


无限循环

使用无限循环时,注意语句加上终止条件,无限循环将导致浏览器崩溃,死机等。

以下都是无限循环的例子:

for (; 😉 { }

while (1) { }

do { } while (1)

// 这些语句都有可能出现无限循环


For…in循环

用来遍历一个对象object的所有属性。也可以用在数组上,但ES6后数组有更好的方法For…of循环。

const person = {

    name: “kelemi”,

    age: 18

};

for (let key in person) console.log(key, person[key]);

// 用在数组上也用for…in

const colors = [‘red’, ‘green’, ‘blue’];

for (let index in colors)

    console.log(index, colors[index])

// 输出:

// age 18

// 0 red

// 1 green

// 2 blue


For…of循环

用来遍历一个数组

const colors = [‘red’, ‘green’, ‘blue’];

for (let color of colors)

    console.log(color)

// 输出:

// red

// green

// blue


Break和Continue

所有循环都可以用。

break:中断循环

continue: 继续循环

let i = 0;

while (i <= 10) {

    // if (i === 5) break;

    if (i % 2 === 0) {

        i++;

        continue;

    }

    console.log(i);

    i++;

}

// 现代javascript一般不用continue,旧版可能还在用,不过太丑了。


基本语法小建议

  • 一个函数结构如果类似:function(){    if(条件){        // 执行语句    }    else{        // 执行语句    }}请改成更简洁的结构:function(){    if(条件){        return    }    // 执行语句}
  • 一个函数只能做一件事,否则就拆分成更小的函数。
  • 嵌套循环结构,可以将内循环提取成外部的一个函数。

小结

本文介绍了javascript的基本语法及结构,下一节将开始介绍javascript中对象的相关知识。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注