《JavaScript高级程序设计》第3章 基本概念
3.4 数据类型
3.4.1 typeof操作符
var message = 'some string';
console.log(typeof message); // 'string'
console.log(typeof(message)); // 'string'
console.log(typeof 95); // 'number'
typeof操作符可能返回的字符串:undefined、boolean、string、number、object、function
注:typeof null 会返回 'object',因为null被认为是一个空的对象引用。
3.4.2 Undefined类型
// 对未初始化和未声明的变量执行typeof操作都会返回undefined
var message;
console.log(typeof message); // 'undefined'
console.log(typeof age); // 'undefined'
我们应该尽量显式地初始化变量的值,这样的话当typeof操作返回 'undefined' 时,我们就知道被检测的变量是尚未声明,而非尚未初始化。
3.4.3 Null类型
如果定义的变量准备在将来用于保存对象,则最好将它初始化为null而非其他值。这样一来只要检查该变量是否等于null值就可以知道它是否已经保存了一个对象的引用。
我们任何时候都没有必要把一个变量显式地赋为undefined,而意在保存对象的变量还没真正保存对象时应该明确被赋为null,这有助于进一步区分undefined和null。
3.4.4 Boolean类型
| 数据类型 | 转换为true的值 | 转换为false的值 |
| Boolean | true | false |
| String | 任何非空字符串 | "" |
| Number | 任何非零数字 | 0和NaN |
| Object | 任何对象 | null |
| Undefined | 不适用 | undefined |
3.4.5 Number类型
console.log(NaN == NaN); // false,NaN与任何值都不相等,包括它自身 // isNaN()如果接收到一个非数值,会首先尝试将这个值转换为数值。
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN('10')); // false,可以被转换成数值
console.log(isNaN('blue')); // true,不可以被转换成数值
由于Number()函数在转换字符串不够理想,我们使用parseInt()函数,它在第一个字符不是数字或负号的时候返回NaN, 如果第一个字符是数字或负号,则继续往后解析,直到遇到非数字字符,后面的会被完全忽略。
parseInt()第二个参数是基数,指定被转换的字符串是什么进制的,解析出来的结果是十进制的。
var num1 = parseInt("10", 2); // 2(按二进制解析)
var num2 = parseInt("10", 8); // 8(按八进制解析)
为了避免错误的解析,建议无论在什么情况下都指定基数,多数情况下要解析的都是十进制数,所以始终将10作为第二个参数是非常必要的。
与parseInt()类似的是parseFloat(),在解析浮点数的时候,第一个小数点有效,第二个则无效。
3.4.6 String类型
将一个值转换为字符串有两种方法,第一种是几乎每个值都有的toString()方法(是方法不是函数),但null和undefined没有这个方法。
第二种是String()函数,它遵循以下规则:
- 如果值有toString()方法,则调用该方法并返回相应结果
- 如果值是null,则返回"null"
- 如果值是undefined,则返回"undefined"
3.4.7 Object类型
通过new操作符可以创建一个对象的实例:
var o = new Object();
这样创建的实例有以下常用属性和方法:
- constructor:保存用于创建当前对象的函数,对于上面的例子而言就是Object()
- hasOwnProperty(property):用于检查给定的属性property在当前对象实例中(而不是在实例的原型中)是否存在
- isPrototypeOf(object):用于检查当前对象是不是传进来的参数object对象的原型
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同
《JavaScript高级程序设计》第3章 基本概念的更多相关文章
- JavaScript高级程序设计 第三章 基本概念
ch3 基本概念 标签(空格分隔): JavaScript 语法 标识符 - 第一个字符必须是字母.下划线或美元 - 驼峰大小写格式 严格模式 ECMAScript5引入,定义了一种解析和执行模型.此 ...
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- JavaScript 高级程序设计 第5章引用类型 笔记
第五章 引用类型 一.object类型 1.创建方法: 1.使用new 操作符创建 var person=new object() Person.name=”Nicholasa” Porson.age ...
- JavaScript高级程序设计第20章JSON 笔记 (学习笔记)
第二十章 JSON 1.Json 可以表示三种类型的值: 1.简单值: 表示数值:5 表示字符串:“hello wrold”注表示字符串时必须使用双引号 2.对象: {“name”:“mi”,”ag ...
- JavaScript高级程序设计第14章表单脚本 (学习笔记)
第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有 ...
- 《JAVASCRIPT高级程序设计》第一章
在使用调制解调器的时代,频繁的表单验证对客户端来说是一个很大的负担,javascript,作为一种专门进行表单验证的客户端脚本语言诞生了.到今天,javascript早已超越了当初设定的角色.Java ...
- JavaScript高级程序设计学习(二)之基本概念
任何语言的核心都必然会描述这门语言基本的工作原理.而描述的内容通常都要涉及这门语 言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念.如前所述, ECMA-262通过叫做 ECMAS ...
- 《JavaScript 高级程序设计》第一章:简介
JavaScript 历史 JavaScript的诞生的主要是当时的 netspace 公司谋求为自己的浏览器 Navigator 添加一种脚本语言,以便在本地客户端进行一些行为操作,而这一功能的需求 ...
- JavaScript中变量、作用域和内存问题(JavaScript高级程序设计第4章)
一.变量 (1)ECMAScript变量肯能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象. (2)基本数据类型是按值访问,可 ...
- 《JavaScript高级程序设计》——第一章JavaScript简介
第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...
随机推荐
- 在javascript中如何取消事件冒泡
如果在javascript中只希望事件发生在它的目标而不是在它的父元素上,即取消它的冒泡事件的发生,该如何做?因为按照javascript发生事件的顺序,它由两个阶段:分别从根元素--父元素--目标元 ...
- CentOS6.4安装Smokeping节点监控软件
Smokeping:它是rrdtool的作者制作的,在图形显示方面很漂亮,可以用来很好的检测网络状态和稳定性,下面简单说一下Smokeping的安装以及配置方法. 0.首先关闭selinux和防火墙 ...
- mariadb介绍
事务(Transaction):组织多个操作为一个整体,要么全部执行,要么全部不执行 “回滚” ,rollback SQL接口:sql语句分析器和优化器 表:为了满足范式设计要求,将一个数据集分拆为多 ...
- nginx 解决400 bad request 的方法(转载)
nginx的400错误比较难查找原因,因为此错误并不是每次都会出现的,另外,出现错误的时候,通常在浏览器和日志里看不到任何有关提示. 经长时间观察和大量试验查明,此乃request header过大所 ...
- WordPress 主题开发 - (六) 创建主题函数 待翻译
We’ve got a file structure in place, now let’s start adding things to them! First, we’re going to ad ...
- C++ 里 构建动态二维数组
//****动态二维数组 /* int m=3; int **data; int n=2; data=new int*[m]; for(int j=0;j<m;j++) { data[j]=ne ...
- Android Activity生命周期以及Fragment生命周期的区别与分析
Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() ...
- Laravel 5 基础(八)- 模型、控制器、视图基础流程
添加路由 Route::get('artiles', 'ArticlesController@index'); 创建控制器 php artisan make:controller ArticlesCo ...
- html中的框架
1.总的代码 <frameset rows=20%,*> <frame src="top.html" /> <frameset cols=30%,*& ...
- jquery的prop()和attr()
jQuery1.6以后prop()和attr()的应用场景如下: 第一原则:只添加属性名称该属性就会立即生效应该使用prop(); 第二原则:只存在true/false的属性应该使用prop(); 设 ...