CY-Left

JavaScript开发语言

JavaScript 中相对生僻的内容 一

ES6 学习奠基

一. 变量提升

函数声明和变量声明总是会被解释器 “提升” 到方法体的最顶部。
函数体内的变量也会被迫提升
for if 中的变量声明也会被迫提升, 故全局变量很容易产生

var a = 1
console.log(a + b)
var b = 1
// 2

二. 标签 (goto)

任意不是保留字的字符串都可以作为标签, 比如 top, 当程序运行到不带冒号的 top 时, 会跳转到 top: 的位置

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. 对象
obj = {
    a: '键可以不用单引号'
    '1a' : '键尽可能加上单引号'
    'a a': '不加单引,无法解析空格'
}
obj.a // 点运算符调用
  1. 函数

函数也是数据类型的一种

function add (a, b) {
    return a + b
}

function getSum (func) {
    return func
}
// 将 add 方法赋予 f 变量, f 成为新的方法
var f = add;

f(add)(1, 3)
// 4

2.1. 函数和类一样, 有属性和方法

2.2. 函数的立即调用

  var i = function(){ return 10; }();
true && function(){ /* code */ }();
0, function(){ /* code */ }(); // 逗号表达式

!function () { /* code */ }();
~function () { /* code */ }();
-function () { /* code */ }();
+function () { /* code */ }();
  1. 数组
    3.1 数组中 length 不仅可以查看长度, 还能控制长度
    3.2 in 表达式判断键是否村子啊
    3.3 forEach 可以循环键值对类型的数组
    3.4 数组空位 hole [1, , 2], 默认会被 foreach 循环 for in 循环跳过, 但是用 undefined 占位则不会被跳过

四. 运算符

1 加号
使用加号运算时, 数值型遇见对象, 布尔, 字符串都会被自动转换成字符串相拼接

2 布尔
undefined
null
false
0
NaN
以上都视为 false

3 二进制位运算 与或非

位运算符直接处理每一个比特位(bit),是非常底层的运算,速度极快,但是很不直观

位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。另外,在 JavaScript 内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,将以32位带符号的整数进行运算,并且返回值也是一个32位带符号的整数

2.9 | 0 // 2
-2.9 | 0 // -2
2147483649.4 | 0 // -2147483647
~ 3 // -4

上面表达式对3进行二进制否运算,得到-4。之所以会有这样的结果,是因为位运算时,JavaScirpt 内部将所有的运算子都转为32位的二进制整数再进行运算。

3的32位整数形式是00000000000000000000000000000011,二进制否运算以后得到11111111111111111111111111111100。由于第一位(符号位)是1,所以这个数是一个负数。JavaScript 内部采用补码形式表示负数,即需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。这个数减去1等于11111111111111111111111111111011,再取一次反得到00000000000000000000000000000100,再加上负号就是-4。考虑到这样的过程比较麻烦,可以简单记忆成,一个数与自身的取反值相加,等于-1。

对字符串进行二进制否运算,JavaScript 引擎会先调用Number函数,将字符串转为数值。

借此, 一个数值字符可以通过两次取非而转成整形

五. 错误处理

和其他语言一样, 各种内置错误, 还有 try catch 语句

JavaScript 会自动添加句末的分号

六. consloe 对象

  1. log
    console.log 可以和 c 的 printf 一样使用
var number = 11 * 9;
var color = 'red';

console.log('%d %s balloons', number, color);
  1. console.warn(),console.error()

  2. console.table
    复杂类型输出成表格!!

  3. count
    计算调用次数

  4. 计算时间差
    console.time(),console.timeEnd()

  5. 调试 debugger

本文虽拙,却也系作者劳动,转载还请保留本文链接: http://cyleft.com/?p=897