数据类型篇二
四.字符串
4.1 定义
字符串就是零个或者多个排在一起的字符,放在单引号或者双引号之中;
4.2 转义符
4.3 字符串与数组
方括号中的数字超过字符串长度,或者方括号中根本不是数字,则返回undefined (无法改变字符串的字符);
4.4 length属性
length属性:返回字符的长度,该属性也无法改变;
4.5 字符集
五.对象
5.1 概述
对象(object)是JavaScript语言的核心概念,也是最重要的数据类型。对象是一组键值对(key-value)的集合,是一种无序是复合数据集合。
键名:对象的所有键名都是字符串,因es6引入了symbol值也可以作为键名,所有加不加引号都可以。键名是数值,会自动转换为字符串;(注:不符合标识符命名条件,必须加引号)对象属性间用逗号隔开;
5.2 对象的引用
不同是变量名指向同一个对象,那么他们都是这个对象的引用,指向同一个内存地址,修改其中一个变量,会影响其他所有变量。
注意:内存地址引用(对象引用):一个改变,都改变;
值引用(值拷贝):一个改变,不影响另一个;
5.3 属性的操作
-
读取: 1.点运算符 obj.p (不能为数值,会被当成小数) ;2.方括号运算符 obj[‘p’] (键名必须加引号,不然会当成变量);
-
赋值:1.点运算符赋值 ;2.方括号运算符赋值 (允许后绑定)
-
查看:object.keys方法(查看对象所有属性);例 object.keys(obj) //[‘key1’ ,‘key2’]
-
删除属性:delete命令用于删除对象的属性,删除成功返回true ;(删除一个不存在的属性也返回true);
-
属性是否存在:in运算符(检测对象是否包含某个属性,检查的是键名)
hasOwnproperty(判断对象的自身属性) -
属性的遍历:for…in循环
- 它遍历是是对象所有可遍历的属性,会跳过不可遍历是属性;2.不仅遍历对象自身属性,还可以遍历继承属性(除toSting属性外);
5.4 with语句
with(对象){语句;}
作用:操作同一个对象的多个属性时,方便书写;with内部赋值操作,必须是对象已经存在的属性,否则会创建一个全局变量;
六.函数
函数是一段可以反复调用的代码块,函数还可以接受不同参数,返回不同值;
6.1 概述
- 函数的声明:
1.function命令:function命令后面是函数名,函数名后面是圆括号,函数体在大括号中; function add(){};
2.函数表达式:变量赋值的写法,将匿名函数赋值给变量
var name=function(){};(注:使用函数表达式声明函数时,function后带函数名,仅在函数内部有效;)
3.Function 构造函数 ;var add=new Function(); - 函数重复声明:
如果同一个函数被多次声明,后声明就会覆盖前面的声明;前一次声明的任何时候都无效; - 函数名的提升:
JS引擎将函数名视同变量名,采用function命令声明的函数时,整个函数会像变量声明一样,被提前到了代码的头部。但是采取赋值语句定义函数,JavaScript会报错;
6.2 函数的属性和方法
- name属性:函数的name属性返回函数的名字;通过变量赋值声明的函数name属性返回变量名;(如果是具名函数,则复返回关键字function之后的函数名)
- length属性:返回函数预期传入的参数个数,即函数定义的参数个数;
- toString():返回一个字符串,内容是函数的源码;内部注释也可以返回;
6.3 函数的作用域
- 定义: (变量存在的范围),在ES5中,一种全局作用域,即变量在整个程序中一直存在,另一个是函数作用域,变量只在函数中存在;ES6又新增了块级作用域;(var 命令来说,局部变量只能在函数内部声明,其他区域中一律为全局)
- 函数内部的变量提升:var 命令声明的变量,不管什么位置,都会提升到函数体的头部;
- 函数本身的作用域:函数本身也是一个值,也有自己的作用域,它的作用域与变量一样,就是其声明所在的作用域,与其运行时所在作用域无关;
6.4 参数
- 定义:函数运行时,需要提供外部的数据,不同外部数据会得到不同的结果,这种外部数据就是参数;
- 参数的省略:函数参数不是必须的,JavaScript允许省略参数;
- 传递方式(参数):1.原始类型(数值,字符串,布尔值)。传值传递(不影响外部);2.复合类型(数组,对象,其他类型),传址传递(会影响外部);3.特殊情况:如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时是不会影响原始值的;
- 同名参数:同名的参数,则取最后出现的那个值;
- arguments对象包含了函数运行时的所有参数,这个对象只存在函数体内部,才可以使用; 1.arguments.length 属性:判断函数调用时到底几个参数;2.arguments很像数组。但是一个对象;3.arguments.callee属性,返回对应原函数;
6.5 函数的其他知识点
- 闭包:定义在应该函数内部的函数,本质上闭包是将函数内部与函数外部连接的桥梁;作用:读取函数内部的变量;变量始终保持在内存中;
- 立刻调用的函数表达式(IIFE)
(function(){} ());
6.6 eval命令
eval命令接受一个字符串作为参数,并将这个字符串当中语句执行。
七.数组
7.1 定义
数组(Array)是按照次序排列是一组值,每个值的位置都是有编号的,整个数组用方括号表示,(编号从0开始),任何类型的数据,都可以放入数组;
7.2 数组的本质
数组属性一种特殊的对象,typeof运算符返回1数组类型是“object”
7.3 length属性
数组的length属性,返回数组的成员数量;
- 数组的数字键不需要连续,length属性的值总是比最大的那个整数键大1;
- length属性是可写的,如果人为设置一个小于当前成员数的值,该数组的成员数量自动减少到了length设置的值。如果认为设置length大于当前元素个数,则数组的成员会增加到这个值,新增的位置都是空位,undefined.如果人为设置不合法的值,JavaScript会报错;
7.4 in运算符
检查某个键名是否存在的运算符in ,适用于对象,也适用于数组;
7.5 for…in循环和数组的遍历
- for…in 循环不仅可以遍历对象,也可以遍历数组,毕竟数组只是一个特殊对象,但是for…in不仅会遍历数组的所有数字键,还会遍历非数字键。
- 数组的遍历可以考虑使用for循环或while循环;
- 数组的方法,也可以用来遍历数组;
7.6 数组的空位
- 定义: 数组的某个位置是空元素,即两个逗号之间没有任何值,我们称该数组存在空位,空位不影响length属性(最后一个元素后面有逗号,并不会参数空位);
- 使用delete命令删除一个数组成员,会形成空位,并且不影响length属性。
- 使用forEach方法,for…in结构,以及object.keys方法进行遍历,空位都会被跳过。而undefined,遍历时不会被跳过
7.7 类似数组的对象
- 定义:如果一个对象的所有键名都是正整数或零,并且length属性,那么这个对象就是很像数组,语法上称为“类似数组的对象”;
- 与数组区别:length属性不是动态的;