变量
命名
- 以 $ _ 字母 数字 命名,数字不能打头 ,区分大小写,不能使用保留字(保留为关键字的字符)、关键字
- JQuery中 $ 就是一个变量,underscore库中 _ 就是一个变量
- 命名要有意义,使代码可读性高,一般三种写法 1.button_confirm 2.buttonConfirm 3.btnConfirm
- 计时器变量一般用i,j,k
声明
var score;score = 4; 相当于 var score = undefiend;score =4
var smScore =4; var xhScore =5 ; 相当于 var xmScore - 4,xhScore =5;
注意:变量的本质是保存数据的容器,变量分为有var 声明和没有var 声明的,不推荐不用var 声明变量的方式
数据类型与堆栈
基本类型:number string boolean undefined null
引用类型: Array Object
区别:基本类型的数据值是不可以被修改的,引用类型是可以修改值的
var num =4;num = 3 //覆盖而已
var person ={};
person.name = 'Xiaoming';
person.sex ='male';
person.sex ='female';
delete person.sex;
- 没有办法给基本类型添加属性,为什么string类型的变量可以使用replace方法呢,因为在调用方法的时候他是找他的包装对象Sting,那些字符串的操作方法都在包装对象上,会把所有的属性与方法借给基本类型,基本类型本身没有属性与方法的。
数据最开始保存在硬盘中,程序运行起来,数据就保存在内存中,这样计算起来比较快速。
内存分为堆内存和栈内存
栈内存是有序且固定大小的,基本类型保存在栈内存中,按值访问
堆内存 无序的 不固定大小的,引用类型保存在堆内存,引用类型的地址保存在栈内存中
变量的比较与复制
两个基本类型的比较 比较的是值,两个引用类型的数据比较,比较的是引用地址
如果想要比较引用类型的的内容,是需要遍历进行比较。
基本类型的复制,复制的只是当前值;引用类型的复制,复制的是引用地址,更改其一都会改变。
如果只想复制引用类型的内容,使用遍历复制,也叫做浅拷贝。因为如果对引用类型中的方法使用此方式复制的话,指向的是同一个引用地址,所以是浅拷贝。jquery中的$.extend()方法既可以深拷贝也可以浅拷贝。
function copyObject(){
var newObj ={};
for(var p inobj){
newObj[p]=obj[p];
}
return newObj;
}
var xm = {
age:18,
score:4
}
xh = copyObj(xm);
undefined==null (true)
有文章对此进行了解释,大致是下面的意思:undefined的布尔值是false,null的布尔值也是false,所以它们在比较时都转化为了false,所以 undefined == null 。
好吧,上面的解释是错误的。
可以从Javascript规范中找到答案:
规范中提到, 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的。
null 和 undefined都代表着无效的值
ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。
undefined ===null (false) 两者类型不一样
- alert(typeof undefined); //output "undefined"
- alert(typeof null); //output "object"
应用:www.jianshu.com/p/3174bdc10…
(注意:清空对象直接赋值为null,而不是用delete)
JavaScript-基本类型和引用类型的比较
1,== 比较的数值,=== 比较的是数值和数据类型。
2,如果是两个引用类型的数据进行比较,那么比较的是它们的引用地址。
3,如果两个不同类型的数据进行==比较,会把左右转换成同一类型再比较,
4,如果一个运算数是对象,另一个是数字,会把对象转换成数字。
--[4]转化为数值类型,所以[4]==4为true;
5,从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象,当给变量赋新值时,此变量就不再指向原来的对象了;
[]==[],[]===[],4==[4],4===[4] false false true false
从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象,当给变量赋新值时,此变量就不再指向原来的对象了;
数组是引用类型的 , 如b=a相当于a与b指向同一个地址 , 但是a=[4,44]之后改变了a的地址 , 所以b不会受到影响 为[4] . 后面又把a=b指向了同一个地址 ,此时为b添加元素 , 因为a、b的地址都没有改变 ,a也会随之改变 ,所以a为[4,44] .
参数传递与类型检测
基本类型的传参是按值传参,相当于变量复制给形参;
引用类型的传参是按值传参,这里的值是地址;
两种写法:typeof(); typeof 只能区分基本类型
instanceof 意思是前面的是后面的实例,该方法只能和引用类型使用,跟基本类型使用只会返回false
[] instanceof Array;[]instanceof Object; {} instanceof Object;{} instanceof Array; ture true ture false