JavaScript中的数据类型

来源:互联网 发布:php trim 编辑:程序博客网 时间:2024/06/13 21:46

最近在学习JavaScript高级程序设计(第三版),做了一些笔记:

       5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和 String。还有 1 种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。
 typeof操作符:鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof 就是负责提供这方面信息的操作符。

Undefined类型:

在使用 var声明变量但未对其加以初始化时,这个变量的值就是 undefined,例如:                 
                    var message;                    alert(message == undefined); //true 

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

对于尚未声明过的变量,只能执行一项操作,即使用typeof 操作符检测其数据类型(对未经声明的变量调用delete 不会导致错误,但这样做没什么实际意义,而且在严格模式下确实会导致错误)。
   var message; // 这个变量声明之后默认取得了 undefined 值   // 下面这个变量并没有声明   // var age  alert(message); // "undefined"  alert(age); // 产生错误,只能对age进行typeof操作。

下面是一道面试题:
var name = 'World!';(function () {  if (typeof name === 'undefined') {    var name = 'Jack';    console.log('Goodbye ' + name);  } else {    console.log('Hello ' + name);  }})();//输出结果是:Goodbye Jack
这里用到的知识点是变量声明提前即JavaScript函数里的所有声明(只是声明,但不涉及赋值)都被提前到函数体的顶部,而变量赋值操作留在原来的位置。上面的代码等同于:
var name = 'World!';(function () {  var name;  if (typeof name === 'undefined') {    var name = 'Jack';    console.log('Goodbye ' + name);  } else {    console.log('Hello ' + name);  }})();

如果去掉函数内的var name = 'Jack'; 由于作用域链的存在,函数内的name就直接用全局变量name = 'World!',此时typeof name的值是'string',而不是'undefined'。
var name = 'World!';(function () {  if (typeof name === 'undefined') {    console.log('Goodbye ' + name);  } else {    console.log('Hello ' + name);  }})();//输出结果为:Hello World!

如果去掉函数内的var name = 'Jack'; 将if (typeof name === 'undefined')改为if (name === 'World!')
var name = 'World!';(function () {  if (name === 'World!') {    console.log('Goodbye ' + name);  } else {    console.log('Hello ' + name);  }})();//Goodbye World!

Null类型: 
从逻辑角度来看, null值表示一个空对象指针,而这也正是使用 typeof操作符检测 null 值时会返回"object"的原因,如下面的例子所示: 
var car = null;alert(typeof car); // "object"
但是
alert(null instanceof Object);//false
原因就是null是个特殊的Object类型的值 ,表示空引用的意思 。instanceof表示某个变量是否是某个对象的实例 ,所以为false。 
undefined 值是派生自null值的:
alert(null == undefined); //truealert(null === undefined); //false

Boolean类型:该类型只有两个字面值:truefalse
Number类型 :
有一个特殊值NaN,即非数值(Not a Number)是一个特殊的数值。 NaN本身有两个非同寻常的特点。首先,任何涉及 NaN的操作(例如 NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN 与任何值都不相等,包括NaN 本身。例如,下面的代码会返回false
alert(NaN == NaN); //false

String类型 :基本数据类型
ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,例如:
var lang = "Java";lang = lang + "Script";
实现这个操作的过程如下:首先创建一个能容纳10 个字符的新字符串,然后在这个字符串中填充"Java""Script",最后一步是销毁原来的字符串"Java"和字符串"Script",因为这两个字符串已经没用了。

Object类型 :
ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行 new操作符后跟要创建的对象类型的名称来创建。而创建 Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象,如下所示:
var o = new Object(); //



















原创粉丝点击