js基础知识系列(一)

script标签

可以通过内联和外联的方式引入脚本,当引入外部脚本后,当前标签内联的脚本就不会执行

属性

  • async:立即下载脚本,但不阻塞页面渲染,脚本下载完毕之后立即执行,不能保证脚本按照顺序执行
  • charset:指定脚本的编码字符集
  • defer:脚本延迟到页面完全解析后依次执行脚本
  • language:脚本语言,已废弃
  • src:脚本url
  • type:脚本语言类型(也称为MIME类型),外联脚本可不填,可以为text/ecmascripttext/javascript,默认为text/javascript

javascript基本语法

标识符

  • 必须以字母、下划线、或美元符号开头
  • 其它字符可以为字母、下划线、美元符号或数字等字符

严格模式(ECMAScrpit5引入)

  • 通过"use strict;"启用严格模式
  • 本质是一个编译指示,告诉引擎切换到严格模式
  • 严格模式下,ECMAScrpit3一些不确定行为会抛出异常

数据类型

基本的数据类型(简单数据类型)有 5 种:undefinednullbooleannumberstring,复杂数据类型object

  • typeof操作符

    • null或者对象都返回object
  • Boolean类型转化

数据类型 转化为true的值 转化为false的值
string 任何非空值 “”
number 任何非 0 数值(包括无穷大) 0 和 NaN
object 任何对象 null
undefined undefined
  • number类型

    • 八进制用0开头,16 进制用0x开头
    • 科学计数法3e5表示 300000
    • 数值转化
      • true转化为 1,false转化为 0
      • undefined转化为NaN
  • string类型

    • toString方法,参数可选基数 2、8、10、16,默认为 10 进制
    • String方法
      • 若存在toString方法,则调用toString方法转化为 10 进制字符串
      • 若为null,则返回"null"
      • 若为undefined,则返回"undefined"
  • object对象

    • constructor:创建对象的函数
    • hasOwnProperty:属性是否存在于当前对象而不是原型链中
    • isPropertyOf:检查传入对象是否为当前对象的原型
    • propertyIsEnumerable:检查属性是否可以用for-in枚举
    • toLocaleString:返回对象的字符串表示
    • toString:返回对象的字符串表示
    • valueOf:返回对象的字符串、数值或布尔值表示,通常于toString相同

操作符

  • 位操作符

    • ~按位非
    • &按位与
    • |按位或
    • ^按位异或
    • >>有符号右移
    • <<有符号左移
    • >>>无符号右移
  • 相等操作符

    • 相等(==)和不相等(!=),强制转化数据类型后再比较
    • 全等(===)和全不等(!==),不转化数据类型直接比较
  • 逗号操作符

    • 一条语句执行多个操作
    • 赋值时返回表达式的最后一项

语句

  • for - in语句循环,没有顺序,nullundefined会抛出异常

  • label语句,在代码中添加标签,和breakcontinue配合使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // 存在lable标签
    let count = 0;
    for (let i = 0; i < 10; i++) {
    outermost: for (let j = 0; j < 10; j++) {
    for (let k = 0; k < 10; k++) {
    if (i >= 5 && k >= 5) {
    break outermost;
    }
    count++;
    }
    }
    }
    console.log(count); // 525

    // 不存在lable标签
    let count = 0;
    for (let i = 0; i < 10; i++) {
    for (let j = 0; j < 10; j++) {
    for (let k = 0; k < 10; k++) {
    if (i >= 5 && k >= 5) {
    break;
    }
    count++;
    }
    }
    }
    console.log(count); // 750
  • with语句

    • 限定作用域在局部对象中,若在局部变量中找不到定义,则在with对象中查找对应的属性

      1
      2
      3
      4
      with (location) {
      console.log(pathname); // location.pathname
      console.log(this); // window
      }
    • with造成性能下降及调试困难,建议少用

  • 函数

    • arguments参数

      • 类似数组,可通过下标形式访问参数,通过 length 属性获取传入参数个数

      • arguments值与对应参数值同步,但不是共用一块内存,而是值的复制

        1
        2
        3
        4
        5
        function doAdd(num1, num2) {
        arguments[1] = 10;
        return arguments[0] + num2;
        }
        console.log(doAdd(1, 2)); // 11
    • 没有签名,因为参数是由包含 0 个或者多个值的数组实现的

    • 没有重载,后定义的函数覆盖之前定义的函数