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
JavaScript(二)数据类型(二)的更多相关文章
- JavaScript筑基篇(二)->JavaScript数据类型
说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...
- JavaScript学习记录二
title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- JavaScript 入门教程二 在HTML中使用 JavaScript
一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
- JavaScript基本概念(二)
JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...
- 一些有用的javascript实例分析(二)
原文:一些有用的javascript实例分析(二) 5 求出数组中所有数字的和 window.onload = function () { var oBtn = document.getElement ...
- 如何对Javascript代码进行二次压缩(混淆)
如何对Javascript代码进行二次压缩(混淆) 对Javascript代码进行压缩(混淆),可以有效减少传输和加载时间.但是,不是所有的变量(方法)都能被混淆的,一般来说,只有非属性的变量(方法) ...
- (C/C++学习笔记) 二. 数据类型
二. 数据类型 ● 数据类型和sizeof关键字(也是一个操作符) ※ 在现代半导体存储器中, 例如在随机存取存储器或闪存中, 位(bit)的两个值可以由存储电容器的两个层级的电荷表示(In mode ...
- 理解JavaScript继承(二)
理解JavaScript继承(二) 5.寄生式继承 function object(o) { function F() {} F.prototype = o; return new F(); } fu ...
- 基础JavaScript练习(二)总结
任务目的 学习与实践JavaScript的基本语法.语言特性 练习使用JavaScript实现简单的排序算法 任务描述 基于上一任务 限制输入的数字在10-100 队列元素数量最多限制为60个,当超过 ...
随机推荐
- kubernetes---kubectl 管理集群资源
由于我现在的集群是把虚拟机的master文件直接拷贝过来的,所以之前的node节点是不存在的,只有k8s-ubuntu-1是新加入的,所以我要把上面之前创建的资源删除 删除deployment--&g ...
- POI生成EXCEL文件
POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...
- HBase之CF持久化系列(续1)
这一节本来打算讲解HRegion的初始化过程中一些比较复杂的流程.不过,考虑前面的博文做的铺垫并不够,因此,在这一节,我还是特意来介绍HBase的CF持久化.关于这个话题的整体流程性分析在博文< ...
- Python——day14 三目运算、推导式、递归、匿名、内置函数
一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系 cmd = input ...
- 关于 redis.properties配置文件及rule
当你配置的 FinanceRlue 的path为/count/users时,redis.properties中就必须也配置一个/users=redis://localhost:6379/2?keyle ...
- Hbase篇--Hbase和MapReduce结合Api
一.前述 Mapreduce可以自定义Inputforma对象和OutPutformat对象,所以原理上Mapreduce可以和任意输入源结合. 二.步骤 将结果写会到hbase中去. 2.1 Ma ...
- Python内置函数(42)——memoryview
英文文档: class memoryview(obj) memoryview objects allow Python code to access the internal data of an o ...
- .NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程
写在前面 上一篇文章中我带着大家进行了权限部分的极简设计,也仅仅是一个基本的权限设计.不过你完全可以基于这套权限系统设计你的更复杂的权限系统,当然更复杂的权限系统要根据你的业务来进行,因为任何脱离实际 ...
- 深入并发包 ConcurrentHashMap 源码解析
以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容 ...
- arrays.xml中使用integer-array引用drawable图片资源,代码中如何将这些图片资源赋值到ImageView控件中
当我们在arrays.xml文件中声明一些图片资源数组的时候: <?xml version="1.0" encoding="utf-8"?> < ...