设为首页 加入收藏

TOP

JavaScript(二)数据类型(二)
2019-09-17 16:27:30 】 浏览:10
Tags:JavaScript 数据 类型

布尔值
布尔值指真或假,开或关,是或否,关键字true和false。下面这些值会被转换成false:

  • undefined
  • null
  • 0
  • -0
  • NaN
  • ""    //  空字符串

布尔值包含toString()方法,可以用这个方法将字符串转换为true或false。
如var b = true; b.toString() 则变成字符串"true"。

null和undefined
null是java script的关键字,他表示一个特殊值,常用来描述空值,使用typeos(null)结果返回object,我们可以把它理解成一个特殊的对象,主要用来描述一个字符串,数组或者一个对象是空的没有值的。


java script还有第二个用于表示空值undefined,它是变量的一种取值。

  • 如果变量没有被初始化将被赋值为undefined。
  • 如果查询对象属性或数组元素的值时,返回undefined则说明这个属性或元素不存在。
  • 如果函数没有返回任何值,默认返回的是undefined。
  • 引用没有提供实参的函数,形参的值是undefined。

undefined是预定义的全局变量(它和null不一样,它不是关键字),它的值就是未定义。在ECMAScript3中,undefined是可读/写的变量,可以给它赋予任意值,这个错误在ECMAScript5中做了修正。undefined在该版本中是只读的。如果使用typeof(undefined)会得到undefined,表名这个值是这个类型的唯一成员。

尽管null和undefined是不同的,但它们都表示空的值,两者往往可以互换,使用“==”会得到两者是相等的,如果使用“===”则两者是不相等的。null和undefined都不包含任何属性和方法。

全局对象
全局对象在java script中有着重要的用途,全局对象的属性是全局定义的符号,java script程序可以直接使用。当java script解释器启动时(或者任何web浏览器加载新页面的时候),他将创建一个新的全局对象,并给它一组定义的初始属性:

  • 全局属性:undefined,Infinity和NaN等
  • 全局函数:isNaN(),parseInt()和eva l()等
  • 构造函数:Date(),RegExp(),String(),Object()和Array()等
  • 全局对象:Math和JSON等

在代码的最顶级,不在任何函数内的java script代码,可以使用java script关键字this来引用全局对象。在客户端java script中,在其表示的浏览器窗口中的所有java script代码中,window对象充当了全局对象,这个全局window对象有一个属性window引用自身,可以代替this来引用全局对象。window对象定义了核心全局属性,但它也针对web浏览器和客户端java script定义了以少部分其它全局属性。

包装对象
java script对象是一种复合值,通过使用“对象.属性/方法”来引用属性或方法。字符串string它不是对象,但是却有属性和方法。这主要是因为当使用“字符串.方法”时java script就会将字符串值通过调用new String()的方式转换成对象,这个对象继承了String类下的所有属性和方法,当引用结束后这个新创建的临时对象将会被销毁。数字和布尔值也有各自的属性和方法也是一样,它们是通过Number()和Boolean()构造函数创建一个临时对象,通过临时对象来调用类的属性和方法。null和undefined没有属于自己的类,所以也就不存在属性和方法了。
如下代码:

var s = "Hello";
s.len = 4;
var t = s.len;

最终结果是t等于undefined,第二行代码创建一个临时字符串对象,并给对象封装len属性,赋值为4,其实第二行代码执行完后这个临时对象就被销毁了。所以第三行代码在接收s.len时此时s.len是一个新的临时对象。这个新的对象是没有值的,java script默认给了一个undefined,所以最终t等于undefined。

不可变的原始值和可变的对象引用
原始值:undefined、null、布尔值、数字、字符串
可变对象:数组、函数、对象({键:值})。
原始值是不可更改的,任何方法都无法更改一个原始值。

例如:var s = "Hello";
s.toUpperCase();
toUpperCase()并不会将变量s中的字符串全部修改成大写,而是会返回一个新的大写字符串,不会对原数据进行修改。


原始值的比较是值的比较,只有在它们的值相等时它们才相等。如var a = 1;var b = 1我们可以说a和b是相等的,var a = "abc";var b = "abc"我们也可以说字符串a和字符串b是相等的。

但如果是对象的比较就不是值的比较了,如var a = [1,2,3];var b = [1,2,3];console.log(a === b);我们会得到结果是false,同样

var a = {"x":1};var b = {"x":1};console.log(a === b)得到的结果也是false。

我们通常将对象称为引用类型(引用一块内存地址),以此来和java script的基本类型进行区分。对象的值都是引用,对象的比较是引用的比较。也就是判断两个对象是否相等,判断的是两个对象是否引用同一块内存地址。如var a = [1,2,3];var b = a;console.log(a === b);这样就会返回true了。因为a和b引用的是同一块内存。

 

思考题:

三位数的反转,如用户输入123,反转后输出321

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇js预解析 下一篇使用for of循环遍历获取的nodeLis..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目