JS变量和数据类型

来源:互联网 发布:ios11 蜂窝移动网络 编辑:程序博客网 时间:2024/06/05 03:39
  1. 变量
  1. JS是一种弱类型的脚本语言
  2. 变量使用之前必须要加var声明,这是编程规范
  3. 变量的命名规则
  1. 变量命名必须以字母/下划线_/$开头
  2. 变量名长度不能超过255个字符
  3. 变量名中不允许使用空格
  4. 不能使用脚本语言中保留的关键字及保留符号作为变量名
  5. 变量名区分大小写(JS是区分大小写的语言)
  1. 变量的类型(所有变量的声明都是var都是不变的,是根据变量的赋值来确定该变量的类型)
  1. 全局变量(在任何地方都有效,但是如果有局部变量的话会被局部变量覆盖)
<1>在方法外部声明的变量
<2>方法内部没有加var关键字声明的变量
  1. 局部变量:方法内部使用var声明的变量(只能在其所在的方法中去范根它才有效)
<1>如果在方法内部,某个变量前没有加var,则这个变量也相当于全局变量,但是要执行完该方法之后才调用得了这个变量。
  1. 数据类型
  1. 基本数据类型
<1>Number:整数和小数、NaN(不是一个数)、Infinity、- Infinity(正、负无穷)
  1. 除了以10进制表示还可以以8进制、16进制表示,并且解析执行的时候会自动转化为10进制数显示
  2. 以后不要做小数相加的判断。因为小数是浮点类型,最高的精度是17位。
<2>Undefined:表示变量声明但未赋值
①这个类型只有一个值,就是undefined
<3>Null:表示一个空的对象引用(也就是赋值为null)
<4>Boolean:直接就是赋值赋为false/true
<5>String:直接就是赋值的时候加双引号/单引号就可以了
  1. 引用类型:Object类型(比如对象、数组、RegExp<正则表达式>、Date)
<1>typeof操作符(关键字):用来判断数据类型的
   typeof后面接要判断的变量,解析执行的时候会显示出相应的数据类型
<2>数组:ECMA Script所定义的数组和其他语言中的数组有很大区别,首先要说的是数组也是一种对象
  1. 特点
- “数组”即一组数据的集合
- Js数组更加类似于java的map容器。长度可变,元素类型可以不同
- 数组长度随时可变,随时可修改(length属性)
- 数组本身也是对象
- 数组的下标也是从0开始
  1. 常用方法
-push(往数组里面加元素,可以是一个也可以是多个;而且还有一个返回值,返回的是新数组的长度<也就是说返回的是你本来定义的原数组再加上用push方法添加元素之后的长度>)、pop(pop方法里面不能传入任何参数,表示从数组的尾部移除一个元素;也有一个返回值,返回的是被移除的元素)
-shift(不能传入任何参数,表示从数组的头部移除一个元素;也有一个返回值,返回的是被移除的元素)、unshift(需要传入参数,表示从头部插入元素;也有一个返回值,返回的是新数组的长度)
-splice(需要传入参数,操作的是数组的本身;第一个参数表示起始位置,第二个参数表示截取的个数<你要截取多少个>,第三个参数表示追加元素的位置,第三个以后的参数表示追加的元素<追加元素是从你截的位置开始替换>)、slice(传入两个参数,不操作数组本身,所以需要定义一个变量来接收;表示截取范围,是一个左闭右开区间;返回的是你截取的内容)
-concat(操作数组的方法,但是不是操作数组本身,所以需要设置一个变量来接收;表示合并粘连两个数组,返回的就是合并的结果)、join(操作数组的方法,但是不是操作数组本身,所以需要设置一个变量来接收;表示在原来的数组元素之间插入内容,返回的就是插入后的结果)、sort(排序<不是按照数值一个个去比较的,而是把每个元素当成一个字符串,然后按照每个字符串的各个字节去比较;所以如果要使用sort这个方法就要自己去定义一个排序的方式>)、reverse(倒序排序<不是从大到小而是按元素的位置来排序,从最后一位往前面排>)等
③创建方式
  • 类似于创建对象(不推荐):var arr1 = new Array() ;
  • 直接用中括号:var arr2 = [];(中括号里面可以写任意类型的元素)
  • 直接输出数组的话会隐式调用对象的toString()方法把对象转化成字符串的形式
④新特性
  • 位置方法:indexOf(需要传入参数,一个参数的时候表示传值<返回的结果是传的那个值的索引位置>;两个参数时:第一个参数表示从第几个位置开始查,第二个参数表示需要检索的元素<返回的是需要的元素的索引位置>,查找数组元素比较的时候是三个等号“===”的比较)、lastlndexOf(需要传入参数,一个参数的时候表示传值<返回的结果是传的那个值的索引位置>,与indexOf不同的是它是从后往前查,一旦查到就立即停止检索,就算前面还有同样的值也不会再检索)
  • 迭代方法:every(对于数组的每一个元素进行一个函数的运行,如果都返回true,最后则返回true;如果有一个返回false,那么最后结果则返回false)、filter(对于数组的每一个元素进行一个函数的运行,给定的函数去执行<相当于一个过滤的概念>,返回的是过滤后剩下的结果)、forEach(循环数组每一项的值,并执行一个方法<就是你可以在方法中定义你想做的事情,然后它会把数组中的每一个值都取到>)、some(对于数组的每一个元素都进行一个函数的运行。如果有一个返回true,最后的结果就返回true;如果都返回false,最后的结果才会返回false)、map(对于数组的每一个元素进行一个函数的运行,经过函数执行完毕后把新的结果返回)
  • 缩小方法:reduce(会迭代数组中所有的项,但是只会构建一个返回值;传入四个参数:第一个参数表示前一个值,第二个参数表示当前值,第三个参数表示当前索引位置,第四个参数表示数组本身;)、reduceRight(会迭代数组中所有的项,但是只会构建一个返回值;传入四个参数:第一个参数表示前一个值,第二个参数表示当前值,第三个参数表示当前索引位置,第四个参数表示数组本身;与reduce不同的地方在于它是从右边开始遍历的<也就是倒序遍历>)
  • <3>Object:是所有类的基础类
①实例化Object类对象:
  • var obj = new Object() ;
  • var obj = {} ;
②使用
  • for in语句式遍历对象:如果要遍历对象的话对象一定是要以数组的形式,也就是说对象一定要加中括号。 (如果对象名字写在中括号里面的话一定要加引号,双引单引都行)
举例:for(var attribute in obj){}   它会把对象里面所有的属性枚举出来,attribute是一个临时变量,in上面定义的object
③Object每个实例都会有下列属性和方法
  • constructor:保存着用于创建当前对象的函数(构造函数)—— 也就是说当你调用.constructor的时候会取得你创建这个对象的函数
  • hasOwnProperty(propertyName字符串):用于检测给定的属性在当前对象实例中(而不是原型中)是否存在 —— 也就是说你传一个字符串,它会判断对象里有没有这个字符串属性;返回的是一个布尔类型的值,如果返回true,就表示该对象里有这个属性;如果返回false,就表示该对象里没有这个属性
  • isPrototypeOf(Object):用于检查传入的对象是否是另外一个对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能使用for-in语句来枚举 —— 返回的是一个布尔值,如果是true,表示该属性能被枚举;如果是false,表示该属性不能被枚举
  • toLocaleString():返回对象的字符串表示。该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串/数值/布尔表示
  • delete:只能删除对象的属性/方法(被删除的会显示为undefined)
<4>其他引用类型对象
  1. 单体对象:不需要实例化对象就可以直接使用的对象
  • Global对象(全局)这个对象不存在,无形的对象:不属于任何其他对象的属性/方法(全局的函数/变量都属于global对象);其内部定义了一些方法和属性:encodeURI(针对URI里面不标准的文字进行编码,会把全局的URI进行编辑,但是URI里面提供的正常的符号它不会进行编码,只是针对于非常特别的不标准的文字进行转码<比如说空格>)、encodeURIComponent(针对URI里面不标准的文字进行编码,只要URI中出现了不标准的,浏览器接收不了的文字,不管是不是正常的符号都会进行编码,这个比较常用)、decodeURI(进行对应的解码,把转换成编码的文字重新变为原来的文字)、decodeURIComponent(进行对应的解码,把转换成编码的文字重新变为原来的文字)、eval(需要一个String类型的参数,相当于一个无形的javascript解析器,只要传入一个字符串就能转换成js的脚本<字符串的内容变为脚本之后就可以直接使用)、parseInt(就是把数据转换为number类型)、parseFloat(就是把数据转换为number类型)、escape(URI的转码<URI里面的全部文字都进行转码>)、unescape(URI的解码<URI里面的全部文字都进行解码>)、isNaN(判断变量是否属于“不是一个数”,如果不是number类型返回的就是tue;如果是number类型,返回的就是false<在js里面只有NaN是自己不等于自己本身的>)
  • Math对象:内置的Math对象可以用来处理各种数学运算;可以直接调用的方法(Math.数学函数(参数));求随机数方法(Math.random(),产生[0,1)范围一个任意数)
  1. Date对象:获取当前时间的一系列详细方法
  2. 基本包装类型:Boolean、String、Number和java的用法类似
  3. Function类型、RegExp类型