3.数据类型和值

数据类型:计算机程序是通过操作值来运行的.在一种程序设计语言中,能够表示并操作的值的类型称为数据类型.
而程序设计语言最基本的特征之一就是它支持的数据类型的集合.

JS的3种基本数据类型:数字,字条串,布尔值,
还支持两种小数据类型:null undefined

JS中支持的复合数据类型:对象
两种:已命名无序,未命名有序(数组)

JS还定义了另一种特殊的对象:函数

3.1 数字
JS所有的数都是浮点数

3.1.1 整型直接量
-2^53~2^53超过这个范围就会失去尾数的精确性
但是在逐位运算符中,是对32位的执行的-2^31~2^31-1
3.1.2 八进制和十六进制的直接量
十六进制:0X或0x开头
八进制:0开头,某些JS支持八进制,但有些不支持,所以最好不要用
3.1.3 浮点型直接量
[digits][.digits][(E|e)[(+|-)]digits]
精确度有限,某些只是近似值
3.1.4 数字的使用
Math算术
3.1.5 数值转换
3.1.6 特殊的数值
Infinity,NaN
Number.MAX_VALUE 最大数字
Number.MIN_VALUE 最小数字(最接近零的数)
Number.NaN
Number.POSITIVE_INFINITY 正无穷大的特殊值
Number.NEGATIVE_INFINITY 负无穷大的特殊值

3.2 字符串
没有CHAR类型

3.2.1 字符串直接量
3.2.2 字符串直接量中的转义序列
\xXX两位十六进制数值XX指定的Latin-1字符
\uXXXX四位十六进制XXXX指定的Unicode字符
\XXX 1到3位八进制数指定的Latin-1字符,但ECMAScript v3不支持

不能转义时忽略\

3.2.3 字符串的使用
last_char=s[s.length-1],用数组的方式把字符读出,但是这不是标准,最好不要使用
3.2.4 把数字转换为字符串
方法1. n+'';
方法2. String(n)
方法3. n.toString(),同时toString()方法可以有一个参数,来设定转换的基数

小数的转换:
方法名 是否科学计数法 参数指定什么
toFixed() 否 小数点后的位数
toExponential() 是 小数点后的位数
toPrecision() 够则用 有意义的数字的位数
3.2.5 把字符串转换为数字
方法1. s-0;
方法2. Number(s);

灵活转换:parseInt,parseFloat,从字符串开始处转换(第一个字符不是数字,则返回NaN),可以忽略或舍去非数字及其以后的部分
parseInt()只截取整数,可以接受一个参数来标明字符串的基数,也可以(以"0x","0X"开头来标明),但是返回相等的十进制的数
parseFloat()截取整数和浮点数

3.3 布尔值
布尔类型的转换:
boolean->num true->1,false->0
num->boolean 0,NaN->false 其它为true

boolean->string true->'true',false->'false'
string->boolean '',undefined->false 其它为true

object->boolean null->false 其它为true

注意它们之间的转换是不可逆的

得到布尔值:
Boolean(x)或!!x

3.4 函数
函数是一个可执行的JS代码段,由JS程序定义或由JS实现预定义.
JS中函数不仅是语法特性,还是数据类型,所以函数可以赋给对象的属性,成为对象的方法.

函数定义:
function square(x){return x*x;}
函数直接量:
var square=function(x){return x*x;};

var square=new Function('x','return x*x;');

3.5 对象
对象是已命名的数据的集合.这些已命名的数据叫对象的属性或域
引用对象的属性:document.write(1)
或关联数组引用法:document['write'](1) (关联数组:数据值和任意的字符串关联起来)

3.5.1 创建对象
var point=new Object();
point.x=1;
point['y']=2;
3.5.2 对象直接量
{K:V,K:V} K可以是字符串
3.5.3 对象转换
object->string toString()
object->num valueOf() 如果不是返回基本类型的值:toString()->num

3.6 数组
有序的集合.
JS没有多维数组,但JS支持数组的嵌套
JS是一种松散类型的语言,所以数组的元素不必具有相同的类型

3.6.1 数组的创建
var a=new Array();
a[0]=1;

带参构造:
new Array(10);创建了一个具有10个未定义元素的数组
3.6.2 数组直接量
[a,b,c,,,d],存放了未定义的元素,逗号之间省去该元素就可以了

3.7 null
null通常看作对象类型的特殊值.

null->boolean false
null->num 0
null->string 'null'

3.8 undefined
使用未声明的变量,或已声明但未赋值,或不存在的对象属性
null==undefined-->true,所以区分两者要使用===,typeof
注意:undefined不是JS的保留字,只是一个全局变量,一个名为undefined的全局变量,其未赋值(未有时,可以自行创建,void运算符也提供了undefined的方法)
undefined->boolean false
undefined->num NaN
undefined->string 'undefined'

3.9 Date对象
var now=new Date(); //当前日期和时间
var xmas=new Date(2007,5,25);

3.10 正则表达式
直接量/ /
后还可以跟一个或多个字母,改变模式的定义

3.11 Error对象
message属性存放JS实现特定的错误的消息

3.12 类型转换小结
值 字符串 数字 布尔 对象
未定义的值 'undefined' NaN false Error
null 'null' 0 false Error
非空字符串 不变 字符串的数字值或NaN true string
空字符串 不变 0 false string
0 '0' 不变 false Number
NaN 'NaN' 不变 false Number
无穷 'Infinity' 不变 true Number
负无穷 '-Infinity' 不变 true Number
任意其它的数字 对应字符串 不变 true Number
true 'true' 1 不变 Boolean
false 'false' 0 不变 Boolean
对象 toString() valueOf()或toString()->num true 不变

3.13 基本数据类型的包装对象
string->String
num->Number
boolean->Boolean

在应用时他们两者之间几乎不区分(除了eval()),会互相创建瞬态的存在

var num=Object(3);会转化为对应的包装对象

3.14 对象到基本类型的转换
1.布尔环境:非空对象用在布尔环境中的时候,都转换化true,eg.Boolean(false)对象转换化true
2.数字环境:先调用对象的valueOf()方法,如果不能返回一个基本类型的值,JS将试图调用对象的toString()方法,并且把结果字符串转化为数字
特殊:数组对象
数组的toString()方法[4,5,6]->4,5,6
[]->''->0
[9]->'9'->9
['ss']->'ss'->NaN
[4,5,'s']->4,5,'s'->NaN
3.环境不明时:如使用运算符+,比较运算符<,<=等
先调用对象的valueOf()方法,如果不能返回一个基本类型的值,JS将试图调用对象的toString()方法,得到字符串,对字符串进行比较
特殊:Date对象
+时总是执行toString()
>比较时总是执行valueOf()

注:大多数对象要么没有valueOf()方法,要么没有一个能够返回有用结果的valueOf()方法.
当把对象和+运算符一起使用的时候,通常会得到字符串的连接
当把对象和比较运算符一起使用的时候,通常会得到字符串的比较结果

注:valueOf()方法可以自定义,所以得到的结果也是可以改变的

3.15 传值和传址
复制 (传值)实际复制的是值,存在两个不同的,独立的拷贝
(传址)复制的只是对数值的引用.如果通过这个新的引用修改了数值,这个改变对最初的引用来说也可见
传递 (传值)传递给函数的是值的一个独立的拷贝,对它的改变在函数外部没有影响
(传址)传递给函数的是对数值的一个引用.如果函数通过传递给它的引用修改了数值,这个改变在函数外部也可见
比较 (传值)比较的是两个独立的值(通常逐字节比较),以判断它们是否相同
(传址)比较的是两个引用,以判断它们引用的是否是同一个数值.对两个不同的数值的引用不相等,即使这个两个数值是由相同的字节构成的

类型 复制 传递 比较
数字 传值 传值 传值
布尔 传值 传值 传值
字符串 不可变 不可变 传值
对象 传址 传址 传址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值