Js高级程序设计第三版学习(一 到 三 章)

                              Js高级程序设计第三版学习(一 到 三 章)

 

前言

由于公司项目需要兼容IOS8以下版本,自己又想使用promise,而ios8以下不兼容es6,在用es5实现promise的过程中,深深感到基础的薄弱,所以打算再啃一下js高级程序设计,进行总结.

 

第一章JavaScript简介

  1. javaScript实现应该由三个部分组成 核心(ECMAscript) 文档对象模型(DOM) 浏览器对象模型(BOM)
  2. DOMDOM1级 由两个部分 组成 DOM Core 和 DOM Html  DOM Core 规定基础XML文档结构,简化对文档的访问和操作,DOM Html 在 DOM Core 基础上 添加对Html 的对象 和方法 .  DOM2级 扩充了鼠标和用户界面事件 范围 遍历 与 css的支持 DOM3级  引入了 统一加载 和保存文档的方法
  3. BOM : 提供与浏览器交互 的方法和接口, 以H5 标准来说, 主流浏览器 都实现了众所周知的方法 而部分特性还是根据浏览器而异.

第二章 在Html中 使用JavaScript

  1. <script>元素: 向html中插入 javaScript, script标签有多个属性,个人认为除了需要兼容远古项目加type 其他并没有用到过,<script>有两种形式, 有src属性 引入外部文件,(为了可维护性,最好将代码写在js文件中),另一种 直接在<script>元素中写入代码,但是需要注意 不能再标签中("</script>")字样 浏览器会解析错误 (正常编辑器 也会提示报错)
  2. 标签位置 : <script> 一般放在</body>标签之前 1. 浏览器是从上到下渲染页面, 防止js代码再执行时 文档还未被渲染, 2 当js内容过多白屏.

第三章 基础概念

  1.语法

  •  区分大小写 : es中的一切都区分大小写 变量 test 与 变量 Test 是两个不同的变量
  •  标识符 : 指函数 变量 属性 首字母 必须是 字母 下划线_ 美圆符$ 之一 其他字符可以是 字母 下划线_ 美圆符$ 数字
  •  语句 : 结尾最好加上 ; 条件控制语句使用 {} 代码块
  •  关键字 : 标识符 不能以关键字命名
  •  变量 : 松散类型, 可以用来保存任意类型
          var message; //定义变量 未赋值
          var xx = 'nihao'; // 定义变量直接赋值
    
          function handle() {
            // 在作用域中属于局部变量 外界无法拿到 这个变量会在函数推出后 就销毁
            var han = 'nihao';
          }
          handle();
          //console.log(han); // 会报错
    
          function test() {
            // 全局变量 但是不推荐在 方法中定义全局变量 不方便以后维护
            khan = 'oo';
          }
          test();
          console.log(khan); // 不会报错
    
          //可以使用 一条语句 定义多个变量
          var a1 = 11,
            a2 = 22,
            a3 = 33;

     

  2.数据类型

  • undefined : 当变量定义,但未被赋值时就会被默认赋值 undefined, 建议不赋值时 给他手动附上undefined , 当undefined == null 为 true undefined 是由null 派生的 , === 时为false
  • null: 给需要存放对象的变量 赋值null  null代表空指针对象, 所以typeOf null 时 等于 object
  • boolean : 布尔类型, true false, true 非0, 非空字符串 对象, false 0 NaN 空字符串 null undefined
  • Number : 浮点类型: 数值中必须带有 .  如果浮点的值本身代表一个整数 (1.0) 那么就会被转换成整数, es对于极大或者极小的数值时 可以使用 科学计数法(e)  3.1e7 等于 3.1*10的7次方,  在js中 0.1+0.2 == 0.3 是false 由于浮点数值的精度是17位小数,所以会造成舍入的误差 , NaN : 非数值 代表NaN, 0/任何数 都等于 NaN,  任何与NaN有关的操作 都会返回NaN, NaN == NaN 为false , 数值转换 Number(), (parseInt,parseFloat) 专用于字符串, parseInt() 第二个参数 代表按几进制解析
  • String : 字符串一旦创建就不能改变, 要更改字符串的值,首先先创建指定字符的字符串,然后把另一个字符串填进去,销毁原来的字符串,在字符串中 可以 \ 用来转译, 在未知 null 或者 undefined的情况下 使用 String() 转换字符串, 也可使用toString()方法
  • object: es中 object 是所有对象的基础

 3.操作符

  • 递增和递减操作符 : 分为前置性或者后置型,在使用时 都会把变量进行转变,然后在进行自增或自减操作
 var a = 1;
      var s = undefined;
      function handle() {
        //前置性与后置性 在不涉及逻辑运算时,或者单独出现并无区别
        a++; //2
        ++a; //2
        //在赋值时 a++ 在赋值结束后 再给自身加1 s = 1
        s = a++;
        //而 ++a 在赋值前就自身加1 s = 2
        s = ++a;
        // 当递增运算符 参与计算 则根据逻辑 进行自加或自减 1 + 3 + 2 + 2  = 8
        s = a++ + ++a + --a + a--;
      }
  • 一元加减操作符 :  +a, -a, 同样先转换, 然后进行 对a进行 正负
  • 位操作符 : 按位非(~)  二进制按位的反码  var a = 10011 (二进制)  ~a = 01100(二进制)

              按位与(&) 二进制所有位进行比较, 对位 都为 1 就返回1 否则返回 0

              按位或(|) 二进制所有位进行比较, 对位只要有一个为1 就返回1 都为0 才返回 0

              按位异或(^) 二进制所有位进行比较, 对位不同就返回1 否则返回 0

              有符号左移(<<) 二进制除符号位的所有位 向左移动 xx位 空出来的地方用0填充,  保留符号位

              有符号右移(>>) 二进制除符号位的所有位 向右移动 xx位 空出来的地方用符号位填充,  保留符号位

              无符号右移(>>>) 二进制所有位 向右移动 xx位 空出来的地方用0填充,  所以在负值时 有可能会偏大

  • 布尔操作符逻辑非( ! )   布尔值去反

                  短路运算符  如果第一位操作数可以获得结果那么就不对第二个操作数进行求职

                             逻辑与( && )  短路运算符   aa && bb  aa转换结果为true 那么就返回 bb 否则就返回aa 如果aa 等于 null undefined NaN 则直接返回aa

                             逻辑或( || )   短路运算符 如果第一位转换结果为true 就返回第一位 否则返回第二位 如果都为 null undefined NaN 则返回null undefined NaN

  • 相等操作符 :  == 先转换再比较 === 直接比较不转换
  • 条件操作符(三元表达式) : variable = boolean_expression? true_value : false_value 如果boolean_expresson转换为true 那么variable 就等于 true_value 反之 false_value

 4.语句

  • while(){} & do{} while() : while()先判断条件 再执行循环, do while 先执行一次 然后再循环
  • for item in obj : 迭代, 用来枚举对象属性  item为属性名
  • label语句: 一般配合 break 语句 和 continue
  • break && continue : break 立刻退出 当前循环, 执行循环后面的语句 continue 退出本次循环 执行下次循环; label语句与break和continue 结合使用 如下方代码: ( 我把break 和 continue这种用法 理解为 跟 c# go to语句 有些类似只不过 js只能在当前这个嵌套循环内使用,而c# 只能在当前语句块内)
 var a = 0;
      label: for (let index = 0; index < 5; index++) {
        for (let j = 0; j < 5; j++) {
          if (j == 1) {
            //当 j == 1 时 break 不单单会跳出当前循环 还会跳出外层循环
            //break label
            // continue 只会跳出 内层循环 跳出后继续执行外层循环
            continue label
          }
          a++;
        }
      }
      console.log(a);//1 || 5

 5.函数

  • function 关键字 封装任意多条语句 return返回一个值
  • arguments :     类似数组  arguments.length 代表传进来的参数个数, arguments[0] 代表第一个参数,以此类推, arguments 可以和 参数(parameter)一起使用    arguments[0] 改变时 parameter1 的值会跟着同步, 但 其实 arguments 跟 parameter1 有两个不同的内存空间 单独改变一个 另一个并不会改变 , 仅仅是在取得最后结果时 会同步
     handle(1)
          function handle(params, params2) {
            params2 = 10;
            console.log(arguments[1]); // undefined
          }

    这是由于arguments 决定他的个数的 是由调用时传参的个数决定的, 而这时 params2 为undefined 而 arguments[1] 也为undefined 他俩并未关联

  • 没有重载 : 在js 中 函数并不能重载 后声明的重名函数,会覆盖先声明的重名函数, 在js中 函数的参数仅仅是提供便利,并不是必须的,他的参数是由数组形式来表示的, 而像其他强类型语言(c#) 只要函数签名不同 就可以重构

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值