1、javascript变量
命名方法:
(1)匈牙利命名法: 变量名=类型+对象描述 (Int 整型 i、Float 浮点 fl、Boolean 布尔 b、String 字符串 s、Array 数组 a、Object 对象 o、Function 函数 fn、Regular Expression 正则 re);
(2)驼峰命名法: 全部小写 (单词与单词间用下划线分割)、大小写混合 (大驼峰:每个单词首字母大写、小驼峰:第一个单词首字母小写,其他首字母大写)。
命名规则:
(1)首字符 (英文字母或者下划线);
(2)组成 (英文字母、数字、下划线);
(3)禁忌 (JavaScript关键词与、保留字)。
声明:
(1)显示声明 (var 变量名)
(2)陋习 (没有类型、重复声明、隐式声明、不声明直接赋值);
(3)正解 (先声明、后读写。 先赋值,后运算);
变量类型:
(1)值类型:一、占用空间固定,保存在栈中。 二、保存与复制的是值本身。三、使用typeof检测数据的类型。四、基本类型数据是值类型。
(2)引用类型:一、占用空间不固定、保存在堆中。二、保存和复制的是指向对象的一个指针。三、使用instanceof检测数据的类型。四、使用new()方法构造出的对象是引用型。
作用域:
(1)全局变量:
一、包含:在函数体外定义的变量、在函数体内部定义的无var的变量。
二、调用:任何位置。
(2)局部变量:
一、包含:在函数内部使用var声明的变量、函数的参数变量。
二、调用:当前函数体内部。
(3)优先级:
局部变量高于同名全局变量。
参数变量高于同名全局变量。
局部变量高于同名参数变量。
那么可以总结为 局部变量的优先级最高、然后是参数变量、最后是全局变量。
(4)特性:
一、忽略块级作用域。
二、全局变量是全局对象的属性。
三、局部变量是调用对象的属性。
(4.1)作用域链:
一、内层函数可访问外层函数局部变量。
二、外层函数不能访问内层函数局部变量。
(4.2)生命周期:
一、全局变量:除非被显示删除,否则一直存在。
二、局部变量:自声明起至函数运行完毕或被显示删除。
三、回收机制:标记清除、引用计数。
2、javascript运算符
算数运算符:
(1)运算符:
“+”
一、功能:
(1.1)对数字进行代数求和。
(1.2)对字符串进行连接操作。
(1.3)将一个数值转换成字符串 (数值+空字符串)。
二、字符串拼接:
(2.1)字符串+字符串 (二者直接拼接)。
(2.2)字符串+数值 (数值转为字符串在拼接)。
“-”
功能:
对操作数进行“取反”操作。
对数字进行减法操作。
将字符串转换成数值 数值型字符串-0
“*”
功能:对两个运算数进行乘法运算。
符号问题:同号得正,异号的负。
“/”
功能:对两个运算数进行除法运算。
符号问题:同号得正,异号的负。
“%”
功能:返回两个除数的余数。
符号问题:和第一个运算数的符号相同。
复合赋值运算符 +=、-=、*=、/=、%= 。
自增与自减:
(1)功能相反:
++ 对唯一的运算数进行递增操作(每次加1)。
-- 对唯一的运算数进行递减操作 (每次减1)。
(2)规则相同:
运算数必须是一个变量、数组的一个元素或者对象的属性。
如果运算数是非数值的则运算符会将它转成数值。
(3)符号位置决定运算结果:
运算数之前 先进行递增(递减)操作,再进行求值 (例如:++a)。
运算数之后 先求值,再进行递增(递减)操作。 (例如:b++)。
关系运算符:
(1)大小关系检测:
(1.1)运算符:
“<” 如果A小于B,则返回值为true,否则返回值为false
“<=”如果A小于等于B,则返回值为true,否则返回值为false
“>=”如果A大于等于B,则返回值为true,否则返回值为false
“>”如果A大于B,则返回值为true,否则返回值为false
(1.2)操作规则:
数值与数值的比较 比较它们的代数值
仅一个运算数为数值 将另一个运算数转换成数值,在比较他们的代数值
字符串之间的比较, 逐字符比较他们的unicode数值
字符串与非数值的比较 将运算符转换成字符串在进行比较
运算数即非数值也非字符串 转换成数值或者字符串进行比较
运算数无法转换成数值或者字符串 返回值为false
与NaN的比较 返回值为false
(2)等值关系检测:
(2.1)相等比较:
(2.1.1)操作符:
== 比较两个运算数的返回值看是否相等
!= 比较两个运算数的返回值看是否不相等
(2.1.2)类型转换:
布尔值: true 1 false 0
对象: 调用valueof() 基本类型。 例如:a.
字符串与数值比较:字符串转换为数值。
(2.1.3)比较原则:
null 与undefined 相等、 比较前不进行任何转换。
NaN 与任何数值都不相等包括其自身。
对象 是否属于同一对象 是 == 否 !=。
(2.2)相同比较
运算符:
=== 比较两个运算数的返回值及数据类型看是否相同
!== 比较两个运算数的返回值及数据类型是否不同
比较原则:
值类型比较:只有数据类型相同,且数值相等时才能够相同
值类型和引用类别比较 肯定不相同
引用类型间比较 比较它们的引用值 (内存地址)
对象运算符:
in 判断左侧运算数是否为右侧运算数的成员。
instancesof 判断对象实例是否属于某个类或构造函数。
new 根据构造函数创建一个新的对象,并初始化该对象。
delete 删除指定对象的属性, 数组元素或变量。
.及[]存取对象和数组元素。
()函数调用,改变运算符优先级等。
逻辑运算符:
(1) !逻辑非
返回值 true 空字符串、 0、undefined、null、NaN;
false 对象、非空字符串、非0数值(Infinity);
特性 如果运算数的值为false则返回true,否侧返回false;
连续使用两次!,可将任意类型转为布尔型值;
(2)&&逻辑与
规则:
第一个操作数是对象, 返回第二个操作数。
第二个操作数是对象, 第一个操作数值为true时返回该对象。
两个操作数都是对象, 返回第二个操作数。
一个操作数是null 返回null 。
一个操作数是NaN 返回 NaN 。
一个操作数是undefined 返回 undefined 。
特性:
当且仅当两个运算数的值都是true时,才返回true,否则返回false;
短路操作 当第一个操作数的值是false则不再对第二个操作数进行求值;
(3)||逻辑或
规则:
第一个操作数是对象 返回第一个操作数
第一个操作数值为false 返回第二个操作数
两个操作数都是对象 返回第一个操作数
两个操作数都是null 返回 null
两个操作数都是NaN 返回 NaN
两个操作数都是undefined 返回 undefined
特性:
当且仅当两个运算数的值都是false时, 才返回false,否则返回true;
如果第一个操作数值为true,则不会对第二个操作数进行求值;
位运算符:
(1)基础知识:
(1.1)类型:
有符号:数值位 前31位
符号位 第32位 0 正数、 1 负数 ;
无符号:只能是正数、第32位表示数值、数值范围可以加大 ;
javascript 数组:
(1)创建方法:
空数组: var Obj =new Array();
指定长度数组: var obj =new Array(size);
指定元素数组: var obj =new Array(元素1、元素2、...、元素N);
单维数组: var obj =[元素1、元素2、元素3、....、元素N];
多维数组: var a =new Array ([数组序列1]、[数组序列2]、[数组序列N]);
(2)基本操作:
(2.1)存取数组元素
单维数组 : 数组名[下标索引]
多维数组:数组名[外层数组下标][内层元素下标]
特性:
数组长度是弹性的,可自由伸缩、
数组下标从0开始、
下标类型 : 数值、 非数值:转为字符串、生成关联数组、下标将作为对象属性的名字
数组元素可添加到对象中
(2.2)增加数组 使用“[]”运算符指定一个新下标
(2.3)删除数组 delete数组名[下标];
(2.4)遍历数组 for(var 数组元素变量 in 数组)
(3)数组属性:
constructor 引用数组对象的构造函数
length 返回数组的长度
prototype 通过增加属性和方法扩展数组定义
(4)ECMAscript 3方法:
(4.1)添加:
push () 在数组末尾添加数组
unshift () 在数组头部添加元素
concat() 合并两个数组
(4.2)删除:
pop() 删除并返回数值的最后一个元素
shift() 删除并返回数组的第一个元素
(4.3)子数组:
splice() :
删除任意数量的项 : 要删除的起始下标、要删除的项数
在指定位置插入指定的项: 起始下标、 0(不删除任何项)、要插入的项;
替换任意数量的项: 起始下标、要删除的项数、要插入的项;
slice():
功能:从已有数组中选取部分元素构成新数组
参数: 返回顶的起始位置
返回顶的结束位置
(特性:如果是负数,则用数组长度加上该值确定位置、启示位置实为数组的实际下标、结束位置的实际下标为结束数值减1);
(4.4)数组排序:
reverse() 颠倒数组中元素的顺序;
sort ():
功能:对字符数组或数字数组进行排序
特性:默认为按字符串比较、 按数值大小比较需要函数支持。
(4.5)数组转换:
toString() 转换为字符串并返回
toLocaleString() 转换为本地格式字符串并返回
join() 用指定分隔符分割数组并转换为字符串
(5)ECMAScript 5方法:
(5.1)位置方法:
indexOf 从数组的起始位置开始查找;
lastIndexOf 从数组的结束位置开始查找 ;
(参数:1.要查找的项、2.表示查找起点的位置索引);
(5.2)迭代方法:
every 如果该函数对每一项都返回true,则返回true;
filter 返回值为true的所有数组成员;
foreach 无返回值
map 返回每次函数调用的结果数组
some 有任意一项返回true,则返回true
(参数:接收参数 要在每一项上运行的函数、运行该函数的作用域对象;传入参数 数组项的值 item、该项在数组中的位置 index、数组对象本身array);
(5.3)缩小方法:
reduce 从数组起始位开始遍历
reduceRight 从数组末尾开始遍历
(参数:接收参数 每一项上调用的函数、作为缩小基础的初始值; 传入参数:前一个值prev、当前值 cur、项的索引 index、数组对象 arry)