书看的眼皮困了,来写个笔记打打精神。
一、操作符
ECMAscript操作符包括算术操作符、位操作符,关系操作符,相等操作符,它们都能适用于很多值,不过在应用于对象的时候,会用到valueOf()方法或toString()方法来方便取得可以操作的值。
1、一元操作符
递增递减:a++,++a,a–,–a,
前置与后置两种类型,把递增操作符放在变量后面不会改变语句结果,但是当语句中包含其他操作时,前置递减与后置递减有区别。
var num1=2;
var num2=20;
var num3=--num1+num2; //等于21
var num4=num1+num2; //等于21
var num1=2;
var num2=20;
var num3=num1-- +num2; //等于22
var num4=num1+num2; //等于21
各类型值运算结果:
var s1="2";
var s2="z";
var b =false;
var f=1.1;
var 0 ={
valueOf:function(){
return -1;
}
};
s1++; //内容为数字的字符串,值变成数值3
s2++; //内容为非数字的字符串,值变成NaN
b++; //内容为boolean,值变成1
f--; //内容为浮点数值,值变成0.100000000000009(由于浮点舍入错误导致)
o--; //内容为对象,调用valueOf(方法取到可计算的值),值变成-2
一元加和减操作符:+ -
+对于数值是正常加减运算,对于非数值,会像Number()转型函数一样対值进行转换,对字符串进行拼接效果。
-主要用于负数表示。
2、位操作符
位操作符用于最基本的层次上,即按内存中表示数值的位来操作数值。将十进制数值转换为二进制来操作。
十进制转二进制:数值除2求余方式,直到除0为止。
二进制转十进制:以2的幂次方计算。
按位非:~返回数值的反码,速度跟快。
按位与:&
按位或:|
左移:<< 左移不会影响操作符的符号位,负数也不影响。
有符号右移:>>
无符号右移:>>>对于负数来说,无符号右移是以0来填充空位,会将负数二进制码当成正数二进制码,顾数值差别较大。
以上操作符均用二进制计算。
二、作用域
基本类型值和引用类型值的特点:
1、基本类型值在内存中占据固定大小的空间,因此保留在栈内存中;
2、引用类型的值是对象,保存在堆内存中,
3、从一个变量向另一个变量复制基本类型的值,会创建这个值的副本;
4、包含引用类型值得变量包含的并不是对象本身,而是一个指向该对象的指针;
5、确定一个值是哪种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符;
所有变量(包括基本类型和引用类型)都存在于一个执行环境(也称为作用域)当中,这个执行环境决定了变量的生命周期,以及那一部分代码可以访问其中的变量。
1、执行环境有全局执行环境和函数执行环境之分;
2、每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链;
3、函数的局部环境不仅可以访问函数作用域中的变量,也可以访问其父环境乃至全局环境;
4、全局环境只能访问在全局环境中定义的变量和函数;