标签:
Chapter 2 值和变量
1、值 Values
计算机能做的唯一的事就是处理数据。
计算机所处理的一切数据,无论是数字、文字,还是图片、音频和视频,其最终在硬件中运行的形态都是bit,用数学方式表达即0和1,用物理方式表达即电流的低压和高压。
在程序语言中,数据被称为“值”。值由一系列的bit组成。
2、值的类型 Types
JavaScript一共有六种类型的值,其中有五种基本类型:number,string,boolean,null,undefined和一种复杂类型:object。
使用typeof操作符可以检测数据类型。typeof返回下列值之一:undefined,boolean,number,string,object,function
2.1 number
JavaScript用64个bit表示一个数,最多能表示264种情况,所以能储存的数是有限的。由于有一部分bit用于表示负号和小数点,因此实际储存的数少于264个。
由于小数只能是有限位数的小数,因此小数的运算往往会失去一定的精确性,例如0.1+0.2的计算结果并不等于0.3。
除了常规写法,还可以用科学计数法,例如3.14e12。
除了十进制,还可以用八进制和十六进制。
三个特殊的数:Infinity、-Infinity、NaN
最大数和最小数储存在Number.MAX_VALUE和Number.MIN_VALUE中,如果一个数值超过了这个范围,会被自动转换为Infinity或-Infinity。
之所以设计NaN这样一个值,是为了避免程序在本应计算出数值却未得到数值时抛出错误从而停止运行。
任何有NaN参与的运算都会返回NaN;NaN和任何数都不相等,包括其自身。
isNaN(value)用于检测value是不是非数值。如果value是数值或者可以被转换为数值,则返回false,反之,返回true,表示“不是数值”。
可以将非数值转换为数值的函数有三个:Number(),parseInt()和parseFloat()
2.2 string
字符串用单引号或双引号包含。
“/”转义符,用于解决某些字符解析的冲突。
“+”,用于连接字符串。
2.3 Boolean
布尔类型只有两个值:true和false;
JavaScript中所有的值都可以在需要的时候由系统按如下规则自动转换为布尔值:
除了false、null、“”、0、NaN、undefined为假,其它的值均为真。
这是JavaScript内含的转换机制。
2.4 undefined
undefined是一个全局变量,它只有一个值就是“未定义”,表示已声明却未初始化(赋值)的情况。从字面上看,我们似乎可以得出这样一个关系:定义=声明+初始化。
2.5 null
null表示“空值”或者“非对象”。专业术语叫“空对象指针”。
在声明一个将用于保存对象的变量时,最好用null进行初始化。
typeof null == object // true
undefined == null // true
undefined === null // false
2.6 object
Formally,an object is a group of pairs of name and value.
对象和前五种数据之所以不同,就在于其储存方式有着根本区别。
值的储存方式有两种:栈(stack)和堆(heap),储存在栈中的数据称为基本类型,储存在堆中的数据称为引用类型。
前五种数据都是基本类型(Primitive,又译原始类型),它们储存在栈内存中,有固定的位置和大小,它们的值是不可变的(immutable),访问基本数据类型的方式是按值访问。
对象是引用类型(Reference),它们储存在堆内存中,没有固定的大小,对象的值是可变的(mutable),访问对象的方式是按引用访问。
堆和栈的区分,源于最小化内存占用的需求。
还有一个重要区别是,ECMA-262中的对象和宿主对象(BOM和DOM)是不同的,宿主对象的属性和方法由宿主提供。
3、类型转换type converision
类型转换分为隐式和显式两种方式。
隐式转换是程序运行时根据需要自动将某些值转换为需要的类型。比如在进行比较运算、加减运算和if语句的条件判断时。
显式转换就是通过函数对值进行转换。例如全局的toString(),valueOf(),parseInt()和parseFloat()方法。
4、变量 Variables
所有的标识符,除去具备特定功能的词,其它的几乎都是变量。
变量并非“储存”了某个值,变量只是一个名称,一个对值的指代(reference)或映射(indicator)。A variable is literally just a name for a particular value at a particular time.
关键字var将变量声明为其所在作用域的局部变量,如果不用var,创建的变量则是全局变量。在函数中声明的变量只有在函数调用时才被创建和赋值,函数调用结束后会被立即销毁。
声明变量可以这样写:
var a = value,
b = value,
c = value;
变量的作用域问题会在函数一章详解。
Kidney日拱一卒JavaScript系列Chapter2 Values&Variables
标签:
原文地址:http://www.cnblogs.com/kidney/p/5664175.html