基本概念

数据类型

ECMAScript中有五种简单数据类型:Undefined、Null、Boolean、Number、String。还有一种复杂数据类型Object。

typeof 操作符

typeof 用来检测给定变量的数据类型。对一个值使用typeof操作符可能会产生以下几种中的某个字符串

undefined —— 如果这个值未定义

boolean —— 如果这个值是布尔值

string —— 如果这个值是字符串

number —— 如果这个值是数值

object —— 如果这个值是对象或者是null

function —— 如果这个值是函数

typeof是一个操作符而不是一个函数。


Undefined 

Undefined类型只有一个值,就是特殊的undefined,如果在用var声明变量却没有对它初始化时,这个变量的值就是undefined。例如:

var message;
alert(typeof message); //输出结果为:undefined

Null

Null是第二个只有一个值的数据类型。从逻辑角度来看,null值表示一个空对象指针,所以在使用typeof操作符检测null时会返回object。

实际上undefined是派生自null的,所以在以下比较重会返回true:

alert(null == undefined) //true
但是在声明变量可以不必刻意的将变量的值设置为undefined,但是对于null,如果要保存变量的对象还没有真正的保存对象时最好让该变量保存null值。这样不仅可以体现null是一个空对象指针,也便于区分undefined和null。


Boolean

Boolean类型中只有两个值,一个为true,一个为false。Boolean是区分大小写的,其中True和true,False和false并不是相同的,True和False都不是boolean类型。如果要将一个值转换成对应的Boolean值,可以调用转型函数Boolean(),书上的转换规则如下
数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零数字(包括无穷大)0和NaN
Object任何对象null
Undefined不适用Undefined


Number
Number可以表示浮点数和整数,而且整数除了十进制外还可以通过八进制或者十六进制来表示,其中八进制的首位必定为0,数字范围是0-7,如果字面中有数字超出了范围就会把这个值当成普通的十进制来处理,十六进制也是如此,但是十六进制前两位一定要是0x,而后的数字中有英文的话无视大小写。例如:
var num1 = 070;        //八进制的56
var num2 = 079;        //9超出范围,所以被当成十进制,解析成79
var num3 = 0xA;         //十六进制的10
浮点数值:
浮点数中必定包含小数点,而且小数点后面必须还得有一个数字,如果小数点后面没有数值就把他当成十进制的数字。
浮点数的最高精度是17位小数,所以在进行算数计算时它的精度远不如整数,例如0.1+0.2的结果不是0.3,而是0.30000000000000004,所以在关于浮点数值计算会产生舍入误差的问题。
NaN :
NaN就是Not a Number,即不是数值,是一个特殊的值,在计算时任何数值在除以非数值是都会返回NaN,这样便不会影响其他部分的代码执行。对于NaN,任何涉及与NaN有关的操作的最后结果都会返回NaN(如NaN+1),而且NaN与任何数值都不相等,包括NaN本身。所以如果想要判断一个值是不是NaN可以使用isNaN()这个函数,这个函数在接受到一个值后会尝试将它转换成数值,如果可以转换成数值则会返回false,否则就会返回true,,例如:
alert(isNaN(NaN));   //true
alert(isNaN(10);       //false
alert(isNaN("10"));   //false,可以转换成数值10
alert(isNaN("blue")); //true,无法转化成数值
alert(isNaN(true));    //false,可以转成数值1

数值转换:
有三个函数可以把非数值转成数值:Number()、parseInt()、parseFloat()。Number()可以用于任何数据类型,后两个专门用于吧字符串转换成数值。
Number()的转换规则如下(书上的):
  • 如果是Boolean值,true为1,false为0。
  • 如果是数值,就是简单的传入和返回。
  • 如果是null,返回0。
  • 如果是undefined,返回NaN。
  • 如果是字符串,则遵循以下规则:

  1. 如果字符串中只包含数字,包括前面带正负号的情况,则将其转换成十进制数,即“1”会变成1,“123”会变成123,而“011”
  2. 会变成11,忽略了前面的0。
  3. 如果字符串中包含有效的浮点格式,如“1.1”就将其转成对应的浮点数值,即1.1。
  4. 如果字符串中包含十六进制格式如“0xf”,会把它转为大小相等的十进制数值,即15。
  5. 如果字符串为空,则转换为0。
  6. 如果字符串包含除上述格式以外的字符,都将其转换成NaN。
如果是对象,则调用对象的valueOf()方法(把它变成字符串),然后依照前面的规则转换返回的值,如果是NaN,则调用对象
的toString()方法再来一遍。

(这排版惨不忍睹。。。。)

由于Number()函数在转换时复杂而又不合理,所以处理整数是就用paseInt(),它在转换时会忽略前面的空格然后看第一个找到的是

不是非数值,不是的话NaN,否则就继续找第二个,直到找完所有或者遇到一个不是数字的字符,然后这时就把前面找到的数字字符

转换成整数,例如:

var num1 = parseInt("123blue");  //123
var num2 = parseInt("");        //NaN
var num3 = parseInt("oxA");    //10,变成十进制了
var num4 = parseInt("22.5");    //22
var num5 = parseInt("70");       //70

如果发现你想把“070”转换成数值是可能不能很好地得到你想要的答案,因为字符串首位的0不知道是简单的数字0,还是八进制

的开头,所以在使用parseInt()时可以在第二个参数中指定它的基数,如parseInt("070",8),得到的就是56而不是70了。

parseFloat()同理,但是如果字符串中出现多个小数点,那么只有第一个小数点是有效的。


String

字符串的使用方式和Java中的并没有太多差别,字符串可以用单引号(‘ ’)或者是双引号(“ ”)来表示。

在ECMAScript中,字符串一旦创建它的值就不能改变,如果要改变的话就要先销毁原来的字符串,然后用新的字符串来填充该

变量,例如:

var lang = "Java";
lang = lang + "Script";
这里的第二行的过程如下:先创建一个能容纳十个字符的新字符串没然后把“Java“和“Script”填充进去,最后把原来的字符串“Java”

“Script”销毁,因为它们已经失去利用价值了。当然,这个过程的发生我们是没办法看到的,因为是在后台进行的。

如果要把一个制转换成字符串,可以使用几乎每个值都有的toString()方法,又或是使用转型函数String()来进行转换,String()的

转换规则是:

如果值有toString()方法,就调用这个方法

如果是null,则返回“null

如果是undefined,则返回“undefined”

因为null和undefined没有toString()方法,所以String就直接返回了这两个值的字面量。


Object

对象其实就是一组数据和功能的集合。对象可以通过new操作符后跟上要创建的对象类型名称来创建。而创建Object类型的实例

并为他添加属性或者方法就可以创建一个自定义的对象了:

var obj = new Object()
单单创建一个Object的实例其实没卵用,但是Object是所有对象的基础





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值