学习笔记_JavaScript

急着要开发智能合约, 需要马上入门JS
找到阮一峰老师的学习笔记, 该教程精简,突出重点
我以一遍看一遍写Markdown的方式进行,
将主要框架和知识点进行记录, 有些细节选择性忽略

基本语法

  • 变量提升,首先读取变量
  • 识别大小写
  • –>在开头被当成注释
  • js的变量不区分作用域,可能是因为他不直接编译吧
  • if和switch是条件语句
    • if的======分别是赋值判断相等判断是否严格相等
    • switch语法, case:+break;使用
  • 三元表达式 ? :,可以理解为if…else

    1
    var 变量=(条件)? 为true的表达式:为false的表达式
  • while循环

  • do…while循环

    1
    2
    3
    do
    语句
    while (条件)
  • for(初始表达式;条件;递增表达式)

  • break跳出代码块或者循环
  • continue跳出当前循环

    数据类型

    概述

  • ES6的6种数据类型
    • 数值(number): 整数和小数
    • 字符串(string): 文本
    • 布尔值(bool)
    • undefined: 未定义
    • null:空值
    • 对象(object): 各类值的集合,理解为go中结构体的对象
      • 狭义对象(object)
      • 数组(array)
      • 函数(function)->数据类型
        tips: var a = 函数
  • type of 运算符,返回数据类型
    • 用来检查外来变量
    • type of null为object,历史遗留问题

      null,undefined和布尔值

  • 辨析nullundefined,语法效果相同,都表示没有

    • if(!undefined)和if(!null),;条件成立, 此时undefinednull表示false
    • null表示没有,undefined表示没定义
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      // 变量声明了,但没有赋值
      var i;
      i // undefined

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

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

      // 函数没有返回值时,默认返回 undefined
      function f() {}
      f() // undefined
  • Bool六个被转为False的值

    • undefined
    • null
    • false
    • 0
    • NaN
    • “”或者’’空字符串

      数值

      概述

  • 整形和浮点型
    • 内部以64浮点型储存,1===1.0
    • 浮点型天生不精确,0.1+0.2===0.3 为false
    • 精度有限
      1
      2
      3
      4
      // 正向溢出
      Math.pow(2,1024)// 返回Infinity
      //负向溢出
      Math.pow(2,-1075) // 返回0

数值表书法

  • 十进制和十六进制表示法,字面表示法
  • 科学技术的两种情况
    • 小数点前的数字多余21位
    • 小数点后的0多于5个
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      1234567890123456789012
      // 1.2345678901234568e+21

      123456789012345678901
      // 123456789012345680000
      // 小数点后紧跟5个以上的零,
      // 就自动转为科学计数法
      0.0000003 // 3e-7

      // 否则,就保持原来的字面形式
      0.000003 // 0.000003

进制和特殊数值

1
2
3
4
5
6
0xff // 255 十六进制
0o377 // 255 八进制
0b11 // 3 二进制
/*有前导0的数值会被视为八进制,但是如果前导0后面有数字8和9,则该数值被视为十进制。*/
0888 // 888
0777 // 511 es不支持,但是浏览器支持
  • 两个0

    • 所有场景+0==-0
    • 一个例外, 做分母

      1
      (1/+0)===(1/-0) //false

      +Infinity-Infinity之分

  • NaN ->特殊值 “非数字”,主要出现在字符转成数字的场合
    • 不等于任何值,包括自己
  • Infinity, 超过js的表示范围就会返回Infinity

    数值相关的全局方法

  • parseInt(,) 的作用
  • parseFloat()的作用
  • isNaN()
  • isFinite() 的作用

    字符串

    概述

  • 统一用单引号表示字符串,双引号也可以
  • (\ )表示转义
  • 字符串和数组

    字符集

Base64转码

对象

概述

  • 对象->一组无序的”键值对”的集合
  • 键值对之间有逗号
  • 对象的引用

    属性的操作

  • 点运算符
  • 方括号运算符(数值键名专属)
  • obj.foo=hello 属性操作还可以赋值
  • 属性查看Object.keys(obj)
  • Object.delete
  • in 检查是否存在
  • for..in 蓄暖

    with语句

  • 同时操作多个属性

    函数

    数组