美文网首页
数据类型、变量、作用域

数据类型、变量、作用域

作者: 想成为大牛的小白 | 来源:发表于2018-03-11 00:48 被阅读0次

    1.数据类型

    基本数据类型:number   string  boolean    null  undefind   symbol
    引用数据类型:Array   Object  RegExp
    

    2.数据类型检测

     typeof问题:不能细分引用数据类型,打印出来都是object
     instanceof:当前这个对象属于某个类。当前这个对象只要是在它的原型链上永远都是true    
     construtor:打印出对象所属的类。给这个类的construtor自己赋值的时候就会出问题
     Object.prototype.toString.call()   打印当前实例this所属类的详细信息要检测谁this指向谁
    

    3.number

    1.isNaN  判断 (检测的内容)检测内容是不是有效数字 is not a NaN 。
      如果不是有效数字,返回true,是一个有效数字false;
      如果要检测的内容不是数字类型的,先转为数字类型再判断(Number())
    2.Number(null)返回0  Number(undefined) 返回NaN  //true  
    Number(‘’)  返回0  Number(false) 返回 0
    Number()强制转换,将其他的类型,转为Number类型 如果要检测字符串,字符串中必须全是数字,返回false,否则返回true
    parseInt()  非强制转换    从左到右依次查找是数字继续查找。
     遇到有个字符不是有效数字,就停止查找,直接返回之前查找的数字
    parseFloat()  非强制转换  只能多识别一个点.
    

    4.boolean

    1. !一个叹号,取反  先转为bool类型再取反,0 null undefined  NaN ""  这五个值取反为true其他都是false
    2.!!相当于直接转为boolean类型
    3.Boolean()强制类型转换  等价于 !! 方法执行的结果为true和false
    

    5.Function

    1)函数执行的四阶段
       -  形成一个私有的作用域
       - 给形参赋值
       - 预解释
       - 代码从上到下执行 
    
    2)函数的对象的关系
       - 所有的函数都是Function这个类中的实例
       - 所有的对象都是Object类中的实例
       - object所有的类都是Function这个类的实例
       - 所有的函数都是Object这个类的实例
       - apply()
        1.第一个参数用来改变this指向,第二个参数是数组,从左到右依次赋值
        2.当aplly改完this指向,传完参数后,让apply前面的函数立即执行
       - bind()预处理机制
          先把bind前面的函数中的this指向改变。参数传了,然后返回一个修改后的函数,需要的时候调用。
    3)函数返回值出现undefined的情况
        没有return    写了return但没有赋值
    

    6.Array数组中的方法

    1.push() 向数组的末尾添加一项,返回值是添加内容后的长度,原数组发生改变。
    2.pop()   数组的末尾删除一项,返回值是删除内容后的长度,原数组发生改变。
    3.unshift() 向数组的最开始位置添加一项,参数是要添加的内容,返回增加后数组的长度,原数组发生改变。
    4.shift() 删除数组第一项,返回被删除的一项,原数组发生改变。
    5.splice(n,m)从索引n开始,删除m项;返回删除的元素,以新数组的形式返回。
         splice(n) 从索引n开始,删除到末尾
         splice()没有删除元素,原来数组不发生改变;
         splice(n,m,x)从索引n开始删除m个用x替换删除的元素。
         splice(n,0,x) 在索引n的前面增加一项;
         splice(0) 克隆   slice(0) 克隆    slice()克隆  ary.concat ()克隆
    
    原数组不发生改变:
    6.slice(n,m) 从索引n开始,截取到索引为m处;
    7.concat() 拼接数组
      1)toString()数组转字符串 ,元数组不发生改变;
      2)join()  eval() 一起用,join进行分割,eval是将字符串转成js代码执行;
    8.sort()排序,只能排0-9之间的数字  sort(function(a,b){return a-b;})
    9.revrse()  倒叙排列数组,原数组发生改变
    10.常用不兼容的方法:
    indexof()根据内容找第一次出现时的索引。
    lastIndexof()   内容出现最后一项的索引;
    11. ary.map()用来遍历数组中的每一项;
    12. ary.forEach()用来遍历数组中的每一项;    map有返回值,forEch没有返回值;
    

    7.字符串常用的方法

    1.charAt(索引) 通过索引找到对应的字符(通过索引找字符)
    2.charCodeAt(索引)通过索引找到对应字符的unicode编码
    3.indexof(字符) 通过字符找出出现第一次的索引
    4.lastIndexof(字符) 通过字符找出出现最后一次的索引(通过字符找索引)
    5.字符串截取
      5.1 substr(n,m) 从索引n开始截取m个字符
      5.2 substring(n,m) 从索引n开始截取到m处
      5.3 slice  从索引n开始截取到m处
    6.转大小写:
      6.1 toLowerCase    大写转小写
      6.2 toUperCase      小写转大写
    7.replace(旧,新);字符串替换
    8.split(分隔符) 根据分隔符把字符串转成数组
    9.macth(字符 ) 返回字符的详细信息
    10.search()和indexof一样,可以放正则 返回索引,找不到返回-1
    

    8.数据类型之间的转化

    相同的数据类型直接比较,对象特殊,返回false
    *  对象==对象  返回false
    *  对象==字符串  [1,2,3].toString()=="1,2,3" 对象先转为字符串(.toString())方法,然后再比较
    *  对象==数字  对象先转为字符串再转为数字,转为数字类型执行的是Number();
    *  对象==布尔    对象先转为字符串,再转为数字,布尔直接转为数字    true 返回1  false  返回0
    *  布尔==字符串  布尔转数字,字符串也转数字。 ‘’空字符串返回的是0
    *  布尔==数字    布尔转数字
    *  数字==字符串    字符串转数字
    *  null==undefined    返回true
    *  null或者undefined任何比较返回的都是false
    *  对象转为字符串永远是[object Object]
    *  对象转字符串再转数字,字符串直接转数字,布尔也是
    

    变量笔记

    1.命名

    匈牙利命名法:变量名=类型+对象描述
    命名规则:
      1)首字符字母或者下划线
      2)字母数字下划线
      3)不能使用关键字和保留字
    声明变量:
      1)不能没有变量  重复声明  隐式声明  不声明直接赋值
      2)先声明,后读写   先赋值,后运算
      3)var let const
    

    2.变量类型

    基本数据类型:
      1. 占用空间固定,保存在栈中
      2.保存与赋值的值本身
      3.使用typeof检测数据的类型
      4.基本数据类型是值的类型
    引用数据类型:
      1.占用空间不固定,保存在堆中
      2.保存与复制的是指向对象的一个指针
      3.使用instanceof检测数据的类型
      4.使用new()方法构造出的对象的引用型
    

    作用域笔记

    1.作用域

    全局变量:
    包含:在函数体外定义的变量
          在函数体内部定义的无var的变量
    调用:任何位置
    
    局部变量:
    包含:在函数内部使用var声明的变量
         函数的参数变量
    调用:当前函数体内部
    
    作用域的优先级:
    局部变量>同名参数变量>同名全局变量
    局部变量高于同名全局变量
    参数变量高于同名全局变量
    局部变量高于同名参数变量
    
    作用域的特征:
    全局变量是全局对象的属性
    局部变量是调用对象的属性
    作用域链: 内层函数可访问外层函数局部变量
             外层函数不能访问内层函数局部变量
    
    声明周期:
     全局变量:除非被显示删除,否则一直存在
     局部变量:自声明起至函数运行完毕或显示删除
     回收机制: 标记清除  引用计数
    

    相关文章

      网友评论

          本文标题:数据类型、变量、作用域

          本文链接:https://www.haomeiwen.com/subject/fulifftx.html