学习的教程地址如下: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

xiaopohair
68 声望26 粉丝

把这辈子活的热气腾腾!