3.基本概念(2)

4.数据类型:ECMAScript 中有5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1 种复杂数据类型,Object。

typeof操作符:检测给定变量的数据类型。对一个值使用typeof 操作符可能返回下列某个字符串:"undefined"——如果这个值未定义;"boolean"——如果这个值是布尔值;"string"——如果这个值是字符串;"number"——如果这个值是数值;"object"——如果这个值是对象或null;"function"——如果这个值是函数(function本质属于特殊的object对象)。

var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"
alert(typeof []); //"object"
alert(typeof null); //"object"

//有些时候,typeof 操作符会返回一些令人迷惑但技术上却正确的值。
//比如,调用typeof null会返回"object",因为特殊值null 被认为是一个空的对象引用。

Undefined类型:Undefined 类型只有一个值,即特殊的undefined。在使用var 声明变量但未对其加以初始化时,这个变量的值就是undefined。

var message;
alert(message == undefined); //true
//这个例子只声明了变量message,但未对其进行初始化。v
//比较这个变量与undefined 字面量,结果表明它们是相等的。


var message = undefined;
alert(message == undefined); //true
//一般不存在需要显式地把一个变量设置为undefined 值的情况。字面值undefined 的主要目的是用于比较


var message;// 这个变量声明之后默认取得了undefined 值
// 下面这个变量并没有声明
// var age
alert(message); // "undefined"
alert(age); // 产生错误
//不过,包含undefined 值的变量与尚未定义的变量还是不一样的


var message; // 这个变量声明之后默认取得了undefined 值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
//然而,对未初始化的变量执行typeof 操作符会返回undefined 值,
//而对未声明的变量执行typeof 操作符同样也会返回undefined 值。

//即便未初始化的变量会自动被赋予undefined 值,但显式地初始化变量依然是明智的选择。
//如果能够做到这一点,那么当typeof 操作符返回"undefined"值时,
//我们就知道被检测的变量还没有被声明,而不是尚未初始化。

Null类型:Null 类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null 值表示一个空对象指针,所以typeof 操作符检测null 值时会返回"object",如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null 而不是其他值。实际上,undefined 值是派生自null 值的,因此ECMA-262 规定对它们的相等性测试要返回true:

alert(null == undefined); //true
//这里,位于null 和undefined 之间的相等操作符(==)总是返回true,
//不过要注意的是,这个操作符出于比较会转换其操作数。
//和undefined不同的是,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null 值。
//这样做不仅可以体现null 作为空对象指针的惯例,而且也有助于进一步区分null 和undefined。

Boolean类型:Boolean 类型是ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true 和false。

虽然Boolean 类型的字面值只有两个,但ECMAScript 中所有类型的值都有与这两个Boolean 值等价的值。要将一个值转换为其对应的Boolean 值,可以调用转型函数Boolean(),当然,和null和undefined不同,不经过转化的话,两者是不会相等的。如下例所示:

var message = "Hello world!";
var messageAsBoolean = Boolean(message);
alert(message == messageAsBoolean)    //false
alert(messageAsBoolean== true)    //true


//在流控制语句(如if 语句),不需要Boolean(),转化也会自动进行
var message = "Hello world!";
if (message){ //true
    alert("Value is true");
}
数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串""(空字符串)
Number任何非零数字值(包括无穷大)0和NaN
Object任何对象null
Undefinedn/a(not applicable,不适用)undefined

Number类型:Number 类型在ECMAScript 中,使用IEEE754 格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)支持各种数值类型。

//最基本的数值字面量格式是十进制整数,可以下面这样直接在代码中输入
var intNum = 55; // 整数


//其中,八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。
//如果字面值中的数值超出了范围(比如,8进制中出现了9、9),
//那么前导零将被忽略,后面的数值将被当作十进制数值解析
var octalNum1 = 070; // 八进制的56
var octalNum2 = 079; // 无效的八进制数值——解析为79
var octalNum3 = 08;  // 无效的八进制数值——解析为8


//十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9 及A~F)。
//其中,字母A~F可以大写,也可以小写。
var hexNum1 = 0xA; // 十六进制的10
var hexNum2 = 0x1f; // 十六进制的31


//在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。
alert(octalNum2 - hexNum1);    //69

String类型

var firstName = "Nicholas";
var lastName = 'Zakas';
//与PHP 中的双引号和单引号会影响对字符串的解释方式不同,
//ECMAScript 中的这两种语法形式没有什么区别。用双引号表示的字符串和用单引号表示的字符串完全相同。


//不过,以双引号开头的字符串也必须以双引号结尾,而以单引号开头的字符串必须以单引号结尾。
var firstName = 'Nicholas"; // 语法错误(左右引号必须匹配)

1. 字符字面量:String 数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其
他用途的字符。这些字符字面量可以出现在字符串中的任意位置,而且也将被作为一个字符来解析。

字 面 量含 义
\n换行
\t制表
\b空格
\r回车
\f进纸
\\斜杠
\'单引号('),在用单引号表示的字符串中使用。例如:'He said, \'hey.\''
\"双引号("),在用双引号表示的字符串中使用。例如:"He said, \"hey.\""
\xnn以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A"
\unnnn以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ

2. 字符串的特点:ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变
某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

var lang = "Java";
lang = lang + "Script";
//以上示例中的变量lang 开始时包含字符串"Java"。
//而第二行代码把lang 的值重新定义为"Java"与"Script"的组合,即"JavaScript"。
//实现这个操作的过程如下:首先创建一个能容纳10 个字符的新字符串,
//然后在这个字符串中填充"Java"和"Script",
//最后一步是销毁原来的字符串"Java"和字符串"Script",因为这两个字符串已经没用了。

3. 转换为字符串要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法;第二种方法转型函数String()。

//第一种方法唯一要做的就是返回相应值的字符串表现
//数值、布尔值、对象和字符串值(该方法返回字符串的一个副本)都有toString()方法。
//但null 和undefined 值没有这个方法。
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"


//默认情况下,toString()方法以十进制格式返回数值的字符串表示。
//而通过传递基数,toString()可以输出以二进制、八进制、十六进制,
//乃至其他任意有效进制格式表示的字符串值。
var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"


//在不知道要转换的值是不是null 或undefined 的情况下,还可以使用第二种方法转型函数String(),
//这个函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则
//如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
//如果值是null,则返回"null";
//如果值是undefined,则返回"undefined"。
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"

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

var o = new Object();
var o = new Object; // 有效,但不推荐省略圆括号
//仅仅创建Object 的实例并没有什么用处,但关键是要理解一个重要的思想:
//即在ECMAScript 中,(就像Java 中的java.lang.Object 对象一样)Object 类型是所有它的实例的基础。

Object 的每个实例都具有下列属性和方法。

constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()。

hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))。

isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句(本章后面将会讨论)来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值