聊聊基础的Javascript

113 阅读4分钟

工作了几年,从来没有想过要正经的在公网分享过什么东西,这次趁着北京清新舒服的连雨的天气,听听音乐、好好的理理javascript的基础,也算是对自己的一个总结吧。

JS 是做客户端语言的

可操作网页中元素,也浏览器的一些功能

  • DOM(document object mode):文档对象模型,提供一些js 的属性和方法,用来操作页面中的DOM 元素

  • BOM ( browser object mode ):浏览器对象模型,提供一些js 的属性和方法,用来操作浏览器的

JS 中的变量 variable

创建变量

  • var/let 创建变量

  • const 创建常量

  • function 创建函数

  • class 创建类

  • import 模块导入

      // ES3
      var a = 12;
      console.log(a);
      
      // ES6
      let b = 2;
      b = 100;
      const c = 20;
      c = 300; // 报错 ,const 创建的变量,存储的值不可修改
      
      // 创建函数 也是一个变量
      function func () {}
      
      // 创建类 也相当于创建 变量
      class B {}
      
      // ES6 的模块导入也可以创建变量
      import Sumber from './summer.js';
      
      // symbol 创建唯一值
      let x = Symbol(100);
      let y = Symbol(200);
    

JS 命名规范

  • 区分大小写

    let class = 200;
    console.log(Class); //---> 无法输出
    
  • 数字、字母、下划线、$ 数字不能作为开头

    let $summer; // ---> 用jq 获取的
    let _summer; // ---> 公共变量
    let 1sumber; // ---> 不可以
    

驼峰命名法: 首字母小写,其余单词首字母大写

    - 常用-增: zdd/insert/create/new
    - 常用-修改: update/delete/del/remove/rm
    - 常用-查询: sel/select/query/get/
    - 信息:info

    不能使用关键字和保留字
  • 关键字

      var let const function class import
      if
      else
      for
      switch
      case
      break
      continue
      do 
      while
      delete
      new
      this
      instanceof
      typeof
    
  • 保留字

       boolean
       float
       int
       double
       long
       char
       debugger ...
    

JS 中常用的数据类型

基本数据类型,也是值数据

  1. number 数字和NAN (not a number ,但属于数字类型)

     1) NaN与所有值不行等,包括自己,NaN != NaN;
     2) isNaN: 非有效数字 true, 有效数字 false;
     注:isNaN 首先验证是否为数字类型,不是的话,先Number()转换在验证
     3) parseInt/parseFloat( [val], [进制] ):也是转换成数字的方法,对于字符串来说,他是从做到右查找有效数字字符,知道遇到非有效数字字符,停止查找,把当前找到的数字返回
     4) == 比较时,可能把其他类型转换成数字
    
  2. string 单引号、双引号、反引号

     其他转换当成字符串:
         1) [val].toString();
         2) 字符串拼接;
    
  3. boolean: true /false

     0 \ NaN \ "" \ ''\ null \ undefined 这5个类型转换为false,
     其他 为true
    
  4. null 空对象指针 : 没有 意料之中

  5. undefined 未定义: 没有 意料之外

引用数据类型 :操作的是丢内存的空间地址

  • object 对象数据类型 :

      {} 普通对象  {[key]: [value]} 属性名: 属性值不能重复
      [] 数组对象
      /^$/ 正则对象
      math 数学函数对象
      日期对象
      类数组对象
    
  • 函数数据类型 function

JS 中数据类型检测

    1. typeof[val]: 用来检测数据类型的运算符

         string、
         number、
         function、
         undefined、
         boolean
         typeof null、[]、{}、/^$/、function 都是object
         
         此方法的返回值都是字符串数据类型。
         console.log(typeof b=="number");//true
         console.log(typeof (typeof b));//string
      
    1. instanceof: 用来检测当前实例是否属于某个类,是ture, fasle

         var ary=[];
         ary instanceof Array  -> true
         ary instanceof RegExp -> false
         ary instanceof Object -> true 所有的对象都是Object这个基类的一个实例
      
    1. constructor: 为实例原型上的方法,指向他的构造函数,constructor可修改,所有一般不用。

         console.log(c.constructor === Object);//true
         console.log(d.constructor === Array);//true
         console.log(e.constructor === Function);//true
         console.log(h.constructor === Date);//true
         console.log(i.constructor === RegExp);//true
      
         function A() {}
         function B() {}
         A.prototype = new B();//此时将A构造函数的原型指向B构造函数的一个实例。
         let obj = new A();
         
         console.log(obj.constructor === A);//false
         console.log(obj.constructor === B);//true
      
    1. Object.prototype.toString.call: 检测数据类型最常用

         console.log(Object.prototype.toString.call(123))      //[object Number]
         console.log(Object.prototype.toString.call(null))     //[object Null]
         console.log(Object.prototype.toString.call({}))       //[object Object]
         console.log(Object.prototype.toString.call(undefined))    //[object Undefined]
         console.log(Object.prototype.toString.call('123'))    //[object String]
      

JS 的操作语句: 判断、循环

判断

  • if else
  • 三元运算符 a ? b : c
  • switch case
  • == 和 ===(绝对相等,数据类型相同)

循环

  • for
  • for in
  • for of (ES6)
  • while
  • do while宋

函数 Function

函数式一个方法或者方法体,函数就是就是把实现某个功能的代码放在一起进行封装,减少代码冗余,提高代码使用率,低耦合高内聚

    创建函数————> 形参、返回值
    执行函数————> 实参数

创建函数

  • ES5

      function [函数名] ([形参1],...) {
          // 函数体
          return [处理后的结果]
      }
      [函数名]([实参1],...)
      
      function fn(a, b){
          return a + b;
      }
    
  • ES6

      [参数] => 函数体
    
      var foo = (a, b) => {
          return a + b;
      }
    

箭头函数与function 函数区别

  • this 指向:箭头函数不变,function 变化

      使用function 定义的函数中的this 随着调用环境变化而变化的,使用箭头函数时候this 指向没有变化,指向定义函数的环境
    
  • 构造函数:function 可以定义构造函数,箭头函数不可

  • 变量提升

    js 的内存机制,function 的级别最高,而用箭头函数定义时,var(let const) 定义变量不能得到提升,所以箭头函数一定要定义调用之前
    
项目 this 构造函数 变量提升
function 函数 随着调用环境变化 可定义构造函数 调用无先后顺序
箭头函数 this 固定不变,执行定义函数的环境 不可定义构造函数 变量无法提升,先定义,后调用