zoukankan      html  css  js  c++  java
  • JavaScript(二)数据类型(二)

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

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

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

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


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

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

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

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

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

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

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

    包装对象
    JavaScript对象是一种复合值,通过使用“对象.属性/方法”来引用属性或方法。字符串string它不是对象,但是却有属性和方法。这主要是因为当使用“字符串.方法”时JavaScript就会将字符串值通过调用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是一个新的临时对象。这个新的对象是没有值的,JavaScript默认给了一个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。

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

    思考题:

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

  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/caesar-id/p/10581171.html
Copyright © 2011-2022 走看看