资讯专栏INFORMATION COLUMN

004-读书笔记-JavaScript高级程序设计 基本概念(下)

nevermind / 976人阅读

摘要:操作符,会将数值改变正数变成负数负数变成正数。同时,也说明了,使用两个逻辑非操作符和的操作结果相同。操作符得到的是余数。不相等操作符有两种。

这篇笔记的内容对应的是《JavaScript高级程序设计(第三版)》中的第三章。

1.操作符 1-1 一元操作符

递增和递减操作符

递增和递减操作符有两个 ++--。一元操作符使用的时候,可以前置也可以后置。由于两个操作方式类似,先只说明 ++-- 类比就可以了。

使用 ++ 操作符,相当于使用了一个简化的语句:

var age = 27;
age++; // 这里相当于 age = age + 1; 的简化
console.log(age); // 28

前置 ++,先加后用;后置 ++,先用后加

前置操作:先加后用

var age = 27;
var num = ++age;       // 相当于 age = age + 1; var num = age; 的简写
console.log(age, num); // 28 28

后置操作:先用后加

var age = 27;
var num = age++;       // 相当于 var num = age; age = age + 1; 的简写
console.log(age, num); // 28 27

思考,下面的代码是什么样的简写?

var num1 = 12;
var num2 = 10;
var num3 = num1++ + ++num2;
console.log(num1, num2, num3); // 13 11 23

全写形式如下:

var num1 = 12;
var num2 = 10;
// ============
num2 = num2 + 1;
var num3 = num1 + num2;
num1 = num1 + 1;
// ============
console.log(num1, num2, num3); // 13 11 23

一元加和减操作符

一元加和减操作符包括 +-

+ 放在数值前面,不会修改数值的内容。

var num = 123;
num = +num; // 123

+ 放在任意数据类型之前,都会发生数据类型转换;转换的结果和使用 Number 方法的结果相同。可以理解成 Number 方法的简写形式。

+true        // 1
Number(true) // 1

- 操作符,会将数值改变:正数变成负数;负数变成正数。

var num = 123;
num = -num; // -123
1-2 布尔操作符

逻辑非(!):

逻辑非就是取反操作,操作结果如下:

操作数 | 结果
-|-
true | false
false | true

逻辑非操作符后面可以跟任意数据类型的数据,操作结果就是 !Boolean()。也就是通过 Boolean() 函数得到的布尔类型值的取反操作。

!NaN          // true
!Boolean(NaN) // true

同时,也说明了,使用两个逻辑非操作符和 Boolean() 的操作结果相同。

!!NaN          // false
Boolean(NaN)   // false

逻辑与(&&):

第一个操作数 | 第二个操作数 | 结果
-|-|-
true | true | true
true | false | false
false | true | false
false | false | false

逻辑与操作符也被称为短路操作符,也就是,第一个操作数的结果为 false,那么就不会执行第二个操作数了。

var num = (3>2) && 5; // 第一个操作数的结果是true,因此num的结果为第二个操作数的结果 5
console.log(num); // 5
var num = (3<2) && 5; // 第一个操作数的结果是false,因此num的结果为第一个操作数的结果 false
console.log(num); // false

逻辑或(||):

第一个操作数 | 第二个操作数 | 结果
-|-|-
true | true | true
true | false | true
false | true | true
false | false | false

逻辑或也是一种短路操作符,如果第一个操作数的结果为 true,那么就不会执行第二个操作数了。

var num = (3>2) || 5; // 第一个操作数的结果是 true,最终的结果是第一个操作数的值
console.log(num); // true
var num = (3<2) || 5; // 第一个操作数的值是 false,最终结果是第二个操作数的值
console.log(num); // 5
1-3 乘性操作符

乘性操作符有三种:* / %。使用乘性操作符的时候,会首先通过 Number() 方法转化操作数,然后再做运算。

/ 操作符得到的结果不像其他语言一样只得到整数,而是得到最终的结果。

console.log(2 / 3); // 0.6666666666666666
console.log(3 / 2); // 1.5
console.log(4 / 2); // 2

% 操作符得到的是余数。

console.log(3 % 2); // 1

通过 /% 得到余数和结果。

function func(num1, num2) {
  return {
    res: ~~(num1 / num2), // ~~ 的作用是取整数
    yus: num1 % num2
  }
}

var res = func(17, 3);
console.log(`结果:${res.res},余数:${res.yus}`); // 结果:5,余数:2
1-4 加性操作符

加性操作符有两个:+ -

+ 操作符,在操作数不是数值的情况下,会先通过 String() 方法将操作数转成字符串,然后字符串相加。

console.log("5" + "2"); // "52"

- 操作符,在操作数不是数值的情况下,会通过 Number() 方法将操作数转成数值,然后操作。

console.log("5" - "2"); // 3
1-5 关系操作符

关系运算符有四个:> >= < <=。比较的规则,一般是把操作数转成数值,然后进行比较。

var res1 = "3" < 2; // "3" 会转成数值 3,然后比较

比较字符串,会比较字符串对应位置上的字符编码:

var res1 = "abc" < "aBc"; // false
console.log("a : " + "a".charCodeAt(0)); // 97
console.log("b : " + "b".charCodeAt(0)); // 98
console.log("B : " + "B".charCodeAt(0)); // 66
console.log("c : " + "c".charCodeAt(0)); // 99

上面代码中,b 的编码大于 B 的编码,因此为 false。

1-6 相等操作符

相等操作符有两种:== ===。不相等操作符有两种 != !==

== : 仅比较值是否相等

=== : 不仅比较值,还要比较数据类型

一些特殊情况:

表达式 | 值
-|-
null == undefined | true
"NaN" == NaN | false
5 == NaN | false
NaN == NaN | false
NaN != NaN | true
false == 0 | true
true == 1 | true
true == 2 | false
undefined == 0 | false
null == 0 | false
"5" == 5 | true
"5" === 5 | false

1-7 三目运算符

三目运算符的语法:variable = boolean_expression ? true_value : false_value。其实是对 if-else 语句的简写:

if(boolean_expression) {
  // true_value
} else {
  // false_value
}

保存两个数中的最大值:

var num1 = 3;
var num2 = 4;
var res = num1 > num2 ? num1 : num2; // 4
1-8 逗号操作符

逗号运算符可以用于一条语句中执行多个操作。

用于声明多个变量:

var num1 = 1, num2 = 2, num3 = 3;

用于赋值,总是会把最后一个逗号后面的值赋值给变量:

var num = (1, 2, 3, 4, 5); // 5

可以用于 ++ 操作符的理解:

var num1 = 10;
var num2 = 12;
var res = 0;
res = num1++ + ++num2; // 23

最后一句代码可以通过逗号运算符,理解成下面的形式:

num2 = num2 + 1, res = num1 + num2, num1 = num1 + 1;
2.语句

由于语句在编程中经常使用,更多的细节,在实际使用的过程中会逐渐加深理解,因此,这里只记录一下基本语法。

2-1 if语句

单个条件的语法:

if (condition) {
  // ...
} else {
  // ...
}

多个条件的语法:

if (condition1) {
  // ...
} else if (condition2) {
  // ... 
} else {
  // ...
}
2-2 do-while语句

语法如下:

do {
  // ...
} while (expression);

循环至少会被执行一次。

var i = 0;
do {
  console.log("hi~~ " + i++);
} while (i > 1);

// hi~~ 0
2-3 while语句

语法如下:

while (expression) {
  // ...
}

不满足条件,循环不会执行:

var i = 0;
while (i > 1) {
  console.log("hi~~ " + i++);
}
2-4 for语句

语法如下:

for (initalization; expression; post-loop-expression) {
  // ...
}

求出 1-100 的和。

var sum = 0;
for (var i = 1; i <= 100; i++) {
  sum += i;
}
console.log("1 + ... + 100 = " + sum);
2-5 for-in语句

for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。

for (property in expression) {
  // ...
}

例子如下:

for (var item in window) { // 循环BOM中window对象中的属性
  console.log(item);
}

如果被迭代对象的属性值是 null 或者 undefined,for-in 语句会报出错误,因此,应该做容错处理。

for (var item in window) { // 循环BOM中window对象中的属性
  if(item !== null && item !== undefined){ // 容错处理
    console.log(item);
  }
}
2-6 break和continue语句

break 和 continue 用来在循环中精准控制代码的执行。

continue 是退出当前循环,继续执行下一个循环

breank 是退出整个循环

for (var i = 0; i < 10; i++) {
  if (i === 5) {
    break; // i 等于 5 的时候,退出当前循环
  }
  console.log("i = " + i);
}

上面代码中,当 i 等于 5 的时候,循环就不再执行了。

for (var i = 0; i < 10; i++) {
  if (i === 5) {
    continue; // 当 i 等于 5 的时候,退出当前循环,接着下一次循环
  }
  console.log("i = " + i);
}

上面代码中,当 i 等于 5 的时候,就不会输出,然后接着执行 i 等于 6 的情况。

2-7 switch语句

语法如下:

switch (expression) {
  case value:
    // ...
    break;
  case value:
    // ...
    break;
  default:
    // ...
    break;
}

其中需要说明的是,判断的每一项是 expression 的值与 value 是否全等。

switch ("1") {
  case 1:
    console.log("相等");
    break;
  default:
    console.log("全等");
    break;
}

// "全等"
3.函数 3-1 函数的组成

一个函数的组成由:关键字function、函数名、函数参数、函数体、返回值

function 函数名(参数1, 参数2, ..., 参数n) {
  函数体
  return 返回值;
}

一个简单的求两数之和的函数。

function getSum(num1, num2) {
  return num1 + num2;
}
console.log("1 + 2 = " + getSum(1, 2));

注意:不能把函数名和函数参数命名为 eval 或 arguments。

3-2 函数的参数

ECMAScript 中,传递函数的参数比较自由,可以不用和定义函数的参数保持一致。

function getSum(num1, num2) {
  return num1 + num2;
}
console.log(getSum());          // 不传参数
console.log(getSum(1));         // 传一个参数
console.log(getSum(1, 2));      // 传两个参数
console.log(getSum(1, 2, 3));   // 传三个参数

其实在函数的内部,始终存在一个类似于数组的对象 arguments,通过这个对象,可以实现不同的个数参数的传递。

function getSum(num1, num2) {
  console.log(typeof arguments);
  for (var i = 0; i < arguments.length; i++) {
    console.log("arguments[" + i + "] = " + arguments[i]);
  }
}
getSum()
getSum(1)
getSum(1, 2)
getSum(1, 2, 3)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92007.html

相关文章

  • JavaScript高级程序设计读书笔记

    摘要:为了每个对象都能通过来检测,需要以或者的形式来调用,传递要检查的对象作为第一个参数,称为。对象都是动态的,这就意味着每次访问对象,都会运行一次查询。是语言中立的用于访问和操作和文档。 一、第三章 基本概念: 1.理解参数 1.1 可以向函数中传递任意数量的参数,并且可以通过arguments对象来访问这些参数。 1.2 arguments对象只是类似数组,它通过length来确定传进来...

    dayday_up 评论0 收藏0
  • JavaScript高级程序设计》(第3版)读书笔记 第4章 变量、作用域和内存问题

    摘要:具体说就是执行流进入下列任何一个语句时,作用域链就会得到加长语句的块。如果局部环境中存在着同名的标识符,就不会使用位于父环境中的标识符访问局部变量要比访问全局变量更快,因为不用向上搜索作用域链。 基本类型和引用类型的值 ECMAscript变量包含 基本类型值和引用类型值 基本类型值值的是基本数据类型:Undefined, Null, Boolean, Number, String ...

    lidashuang 评论0 收藏0
  • 003-读书笔记-JavaScript高级程序设计 基本概念(上)

    摘要:尚未声明的变量,只能执行一项操作,就是检测该变量的数据类型。表示的是空对象指针,因此,使用操作符得到的结果是。 这篇笔记的内容对应的是《JavaScript高级程序设计(第三版)》中的第三章。 1.语法 1-1 区分大小写 ECMAScript 中的一切都是区分大小写的。 test 和 Test 首字母不同,那么它们就不相同 typeof 和 typeOf 中间有个字母大小写不同...

    shmily 评论0 收藏0
  • Javascript 设计模式读书笔记(二)——封装,简单的创建对象模式

    摘要:创建对象中,创建对象的基本模式有三种。因此,在设计构造函数时,需要进行慎重考虑。因此在中,这种问题被称作继承破坏封装。静态成员每个只有一份,直接通过类对象进行访问。 什么是封装 找工作时一些公司给了offer后我就想知道真正拿到手的是多少,毕竟赋税繁重。但各种税也好,五险一金也好我实在是弄不清楚,于是我就会在网上的一些税后收入计算器上进行计算,只需要填写一些基本信息,比如税前收入,所...

    lentrue 评论0 收藏0
  • 004-读书笔记-Vue官网 Class与Style的绑定

    摘要:绑定绑定,使用,简写的形式是。绑定比较灵活,可以使用表达式字符串对象或数组。绑定字符串绑定字符串的时候只能绑定一个,不能绑定多个。 1.绑定Class 绑定Class,使用 v-bind:class,简写的形式是 :class。绑定Class比较灵活,可以使用表达式、字符串、对象或数组。 1-1 搭建结构 首先,新建一些 class 样式: .colorRed { colo...

    hufeng 评论0 收藏0

发表评论

0条评论

nevermind

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<