数据类型、变量、作用域
2018-03-11 本文已影响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声明的变量
函数的参数变量
调用:当前函数体内部
作用域的优先级:
局部变量>同名参数变量>同名全局变量
局部变量高于同名全局变量
参数变量高于同名全局变量
局部变量高于同名参数变量
作用域的特征:
全局变量是全局对象的属性
局部变量是调用对象的属性
作用域链: 内层函数可访问外层函数局部变量
外层函数不能访问内层函数局部变量
声明周期:
全局变量:除非被显示删除,否则一直存在
局部变量:自声明起至函数运行完毕或显示删除
回收机制: 标记清除 引用计数