关于javascript:JavaScript-教程学习补遗一

6次阅读

共计 3725 个字符,预计需要花费 10 分钟才能阅读完成。

学习的教程地址如下:JavaScript 教程

根本语法

变量申明

  1. 变量无论在哪申明都会晋升到首行;
  2. 变量能够用 $ _ 以及 任意的 Unicode 字母,但不能是数字;
  3. 一个 var 能够申明多个变量
var a, b = 1;
  1. 一行代码只有 ; 时,示意空语句;;;; 这样就是 3 个空语句;
  2. 如果变量申明没有赋值,值为 undefined
  3. 区块 {} 并不会限度变量的作用域;

js 应用 html 的正文

上面是 html 的正文
<!-- html 正文 -->

js 也能够应用,比方

var x = 1; <!-- x=2;
--> x = 3;

留神:

  1. x 的值是 1;
  2. --> 必须在行首,才会被当成单行正文,如果是写在代码两头,会可能被当成 — 运算符;
function countdown(n) {while (n --> 0) console.log(n);
}
countdown(3);

输入的是:2 1 0
while 这行被解释成 n-- > 0

条件判断

  1. 优先应用 === 而不是 == 做条件比拟;
if (x = 2) { // 不报错,被当成赋值语句了
if (2 = x) {// 报错,这样能够防止被当成赋值语句
  1. if … else … 的构造倡议应用 {},否则 else 会主动与他最近的 ‘if’ 配对;
if (m !== 1) {if (n === 2) {console.log('hello');
  }
} else {console.log('world');
}
// 输入的值是 world
  1. switch 语句外部采纳的是“严格相等运算符”,不会产生成类型转换;
var x = 1;

switch (x) {
  case true:
    console.log('x 产生类型转换');
    break;
  default:
    console.log('x 没有产生类型转换');
}
// x 没有产生类型转换
  1. switchcase 中都能够应用表达式
switch (1 + 3) {
  case 2 + 2:
    f();
    break;
  default:
    neverHappens();}
  1. for 能够不写表达式,但 不能省略;
for (; ;){console.log('Hello World');
}
  1. break 语句用于跳出代码块或循环。
  2. continue 语句用于立刻终止本轮循环,返回循环构造的头部,开始下一轮循环。
  3. 如果存在多重循环,不带参数的 break 语句和 continue 语句都只针对最内层循环。
  4. label 标签通常与 break 语句和 continue 语句配合应用,跳出特定的循环。
top:
  for (var i = 0; i < 3; i++){for (var j = 0; j < 3; j++){if (i === 1 && j === 1) break top;
      console.log('i=' + i + ', j=' + j);
    }
  }
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0

数据类型

分类

  1. 数值(number)、字符串(string)、布尔值 (boolean) 这三种类型,合称为原始类型
  2. 对象(object)是最简单的数据类型,又能够分成三个子类型。
  • 广义的对象(object)
  • 数组(array)
  • 函数(function)
  1. undefinednull,个别将它们看成两个非凡值。
  2. typeof运算符能够返回一个值的数据类型。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object",这个是历史起因造成的
typeof undefined
// "undefined"
function f() {}
typeof f
// "function"
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"

nullundefined

  1. null 示意空值;
  2. undefined 示意“未定义”;
// 变量申明了,但没有赋值
var i;
i // undefined

// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {return x;}
f() // undefined

// 对象没有赋值的属性
var  o = new Object();
o.p // undefined

// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined

布尔值

  1. 布尔值转换规则是除了上面六个值被转为false,其余值都视为true
  • undefined
  • null
  • false
  • 0
  • NaN
  • ""''(空字符串)

空数组([])和空对象({})对应的布尔值,都是true

数值

  1. 所有数字都是以 64 位浮点数模式贮存,所有数字都是小数(64 位浮点数)。某些运算只有整数能力实现时,会主动把 64 位浮点数,转成 32 位整数,而后再进行运算;
1 === 1.0 // true
  1. 浮点数不是准确的值
0.1 + 0.2 === 0.3
// false

0.3 / 0.1
// 2.9999999999999996

(0.3 - 0.2) === (0.2 - 0.1)
// false
  1. 浮点数的 64 个二进制位,从最右边开始,是这样组成的。
  • 第 1 位:符号位,0示意负数,1示意正数
  • 第 2 位到第 12 位(共 11 位):指数局部
  • 第 13 位到第 64 位(共 52 位):小数局部(即有效数字
  1. 数值的精度 -2^53 到 2^53
  2. 数值范畴 2^1024 到 2^-1023
  3. Number 对象的 MAX_VALUE 和 MIN_VALUE 属性,返回能够示意的具体的最大值和最小值。
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324
  1. 数值能够用字面量(十进制、十六进制、八进制、二进制),也能够用迷信计数法
  • 十进制:没有前导 0 的数值。
  • 八进制:有前缀 0o0O的数值,或者有前导 0、且只用到 0 - 7 的八个阿拉伯数字的数值。
  • 十六进制:有前缀 0x0X的数值。
  • 二进制:有前缀 0b0B的数值。
  1. JavaScript 会主动将数值转为迷信计数法(小数点前的数字多于 21 位。小数点后的零多于 5 个。)示意,其余状况都采纳字面模式间接示意。
  2. 简直所有场合,正零和负零都会被当作失常的 0。惟一有区别的场合是,+0-0当作分母,返回的值是不相等的。
(1 / +0) === (1 / -0) // false

下面的代码之所以呈现这样后果,是因为除以正零失去+Infinity,除以负零失去-Infinity,这两者是不相等的

NaN

  1. NaN是 JavaScript 的非凡值,示意“非数字”
  2. 0 除以 0也会失去NaN
0 / 0 // NaN
  1. NaN 不是独立的数据类型,而是一个非凡数值
typeof NaN // 'number'
  1. NaN 不等于任何值,包含它自身。
NaN === NaN // false
  1. 数组的 indexOf 办法外部应用的是严格相等运算符,所以该办法对 NaN 不成立。
[NaN].indexOf(NaN) // -1 
  1. NaN在布尔运算时被当作false
Boolean(NaN) // false 
  1. NaN与任何数(包含它本人)的运算,失去的都是NaN
NaN + 32 // NaN
NaN - 32 // NaN
NaN * 32 // NaN
NaN / 32 // NaN

Infinity

// 场景一
Math.pow(2, 1024) // Infinity,超过最大值,或小于最小值

// 场景二
0 / 0 // NaN
1 / 0 // Infinity,非 0 除 0 
Infinity === -Infinity // false,有正负之分

1 / -0 // -Infinity
-1 / -0 // Infinity
Infinity > 1000 // true,正无穷大于任何值
-Infinity < -1000 // true,负无穷小于任何值

InfinityNaN 比拟,总是返回false

Infinity > NaN // false
-Infinity > NaN // false

Infinity < NaN // false
-Infinity < NaN // false

运算规定

5 * Infinity // Infinity
5 - Infinity // -Infinity
Infinity / 5 // Infinity
5 / Infinity // 0

0 乘以 Infinity,返回NaN;0 除以Infinity,返回0Infinity 除以 0,返回Infinity

0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity

Infinity加上或乘以Infinity,返回的还是Infinity

Infinity + Infinity // Infinity
Infinity * Infinity // Infinity

Infinity减去或除以Infinity,失去NaN

Infinity - Infinity // NaN
Infinity / Infinity // NaN

Infinitynull 计算时,null会转成 0,等同于与 0 的计算。

null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity

Infinityundefined 计算,返回的都是NaN

undefined + Infinity // NaN
undefined - Infinity // NaN
undefined * Infinity // NaN
undefined / Infinity // NaN
Infinity / undefined // NaN
正文完
 0