JavaScript学习笔记(八) 基本类型包装器和Error对象

Primitive Wrappers(基本类型包装器)

JavaScript有五种基本类型:number,string,boolean,null和undefined;
除了null和undefined例外,其他3种都有对应的基本类型包装器对象(primitive wrapper objects);
包装器对象可以使用内置的Number(),String()和Boolean()构造函数创建;

为了说明基本类型的number和number对象的区别,请看这个例子:
// a primitive number
var n = 100;
console.log(typeof n); // "number"
// a Number object
var nobj = new Number(100);
console.log(typeof nobj); // "object"
包装器对象有一些很有用的属性和方法,比如:
number对象的toFixed() and toExponential()方法;
string对象的substring(),charAt()和toLowerCase()方法,和一个length属性;

这些方法是非常方便并且可以成为相对于基本类型选择创建对象绝佳理由;
但是这些方法在基本类型身上同样有效,当你在基本类型身上调用一个方法时,基本类型会被临时的转换成对象;
var s = "hello";
console.log(s.toUpperCase()); // "HELLO"
// the value itself can act as an object
"monkey".slice(3, 6); // "key"
// same for numbers
(22 / 7).toPrecision(3); // "3.14"

因为基本类型可以在你需要的时候表现的像一个对象,通常没有理由去使用冗长的包装器构造方法;
比如:当你可以简单使用"hi"的时候,你不必写new String("hi");
// avoid these:
var s = new String("my string");
var n = new Number(101);
var b = new Boolean(true);
// better and simpler:
var s = "my string";
var n = 101;
var b = true;

一个使用包装器类型的理由就是你想扩展它的值,因为基本类型不是对象,他们不能用属性扩展;
// primitive string
var greet = "Hello there";
// primitive is converted to an object
// in order to use the split() method
greet.split(' ')[0]; // "Hello"
// attemting to augment a primitive is not an error
greet.smile = true;
// but it doesn't actually work
typeof greet.smile; // "undefined"

在上面这段代码中,greet仅仅是被临时的转换成一个对象,使访问它的属性和方法的时候不会报错;
另一方面,如果greet是使用new String()定义的一个对象,那么扩展的smile属性就能如预期一样工作;
扩展string,number,或者boolean的值很少被用到——除非你真的需要——因此你很可能不需要使用包装器构造方法;

当你不使用new时,包装器构造方法会将传入的参数转换成他们对象的基本类型:
typeof Number(1); // "number"
typeof Number("1"); // "number"
typeof Number(new Number()); // "number"
typeof String(1); // "string"
typeof Boolean(1); // "boolean"


Error对象(Error Objects)

JavaScript有很多内置的error构造函数,比如:Error(),SyntaxError(),TypeError()和其它的;
他们和throw语句一起使用,这些构造函数创建的error对象有以下属性:
name:创建对象的构造函数的名字,可能是普通的“Error”或者更专业的构造函数,就像“RangeError”;
message:创建error对象时,传递的字符串;
Error对象还有其他的属性,好比错误发生的行号和文件名,但是这些额外的属性是浏览器扩展的并不是所有浏览器都实现的,所以是不可靠的。

另一方面,throw可以和任何对象一起使用,不一定非要是error构造函数创建的对象;
所以你可以选择抛出你自己的对象,就像error对象的name和message属性,任何其他属性都可以被catch语句处理;
try {
    // something bad happened, throw an error
    throw {
        name: "MyErrorType",
        // custom error type
        message: "oops",
        extra: "This was rather embarrassing",
        remedy: genericErrorHandler // who should handle it
    };
} catch(e) {
    // inform the user
    alert(e.message); // "oops"
    // gracefully handle the error
    e.remedy(); // calls genericErrorHandler()
}

Error的构造函数当做函数调用(不使用new)和当做构造函数(使用new调用)是一样的,返回一样的error对象






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
javascript完全自学手册 目 录 第1篇 JavaScript基础篇 第1章 JavaScript简介 1 1.1 JavaScript概述 1 1.1.1 什么是JavaScript 1 1.1.2 JavaScript基本特点 2 1.1.3 常用的Web开发语言 3 1.2 JavaScript的应用 4 1.2.1 客户端应用 5 1.2.2 服务端应用 5 1.3 在Web页面中使用JavaScript 5 1.3.1 HTML的基本结构 5 1.3.2 在HTML中嵌入JavaScript 7 1.3.3 链接JavaScript文件 9 1.4 编写JavaScript的工具 11 1.4.1 使用纯文本编辑 11 1.4.2 使用专业化脚本编辑工具 13 1.4.3 使用Microsoft脚本编辑 15 第2章 JavaScript编程基础 19 2.1 基础语法 19 2.1.1 数据类型 19 2.1.2 变量和常量 22 2.1.3 表达式 24 2.1.4 运算符 24 2.2 流程控制 27 2.2.1 条件语句 27 2.2.2 循环语句 30 2.2.3 其他语句 35 2.3 使用对话框 38 2.3.1 警告对话框 38 2.3.2 确认对话框 40 2.3.3 提示对话框 40 第2篇 JavaScript内置对象篇 第3章 JavaScript内置对象 43 3.1 JavaScript对象概述 43 3.1.1 对象的概念 43 3.1.2 使用JavaScript对象 基础知识 44 3.2 Array对象 46 3.2.1 创建Array对象 46 3.2.2 Array对象属性 47 3.2.3 Array对象方法 48 3.3 String对象 51 3.3.1 创建String对象 51 3.3.2 String对象属性 51 3.3.3 String对象方法 53 3.4 Math对象 56 3.5 Date对象 62 3.5.1 Date对象方法 62 3.5.2 使用Date对象 63 3.6 自定义对象 67 第4章 JavaScript常用对象 73 4.1 Document对象 73 4.1.1 Document对象概述 73 4.1.2 使用Document对象 75 4.2 Form对象及其元素 79 4.2.1 Form对象概述 79 4.2.2 表单元素 80 4.2.3 表单元素属性和事件 82 4.2.4 表单验证 85 4.3 Anchor与Link对象 89 4.3.1 Anchor对象 89 4.3.2 Link对象 90 4.4 Image对象 92 4.4.1 图像翻转 92 4.4.2 图像载入 92 第5章 JavaScript其他常用 窗口对象 96 5.1 Window对象 96 5.1.1 常用属性和方法 97 5.1.2 多窗口控制 100 5.2 Screen对象 103 5.3 Navigator对象 105 5.4 Location对象 107 5.4.1 常用属性和方法 107 5.4.2 Location对象的应用实例 109 5.5 History对象 112 5.5.1 常用属性和方法 112 5.5.2 History对象的应用实例 113 5.6 Frame对象 115 5.6.1 Frame对象概述 115 5.6.2 常用属性 116 5.6.3 Frame对象的应用实例 117 第6章 DOM对象 122 6.1 DOM概述 122 6.1.1 DOM简介 122 6.1.2 DOM与HTML文档 124 6.2 DOM对象 125 6.2.1 DOM基本接口 125 6.2.2 DOM基本对象 128 6.3 使用DOM 128 6.3.1 DOM基础 129 6.3.2 Node和NodeList接口 131 6.3.3 Element接口 134 6.3.4 Text接口和Attr接口 136 6.4 操作HTML文档 138 6.4.1 访问元素 138 6.4.2 添加节点 140 6.4.3 删除节点 142 6.4.4 对属性进行操作 146 第3篇 JavaScript高级编程篇 第7章 正则表达式 151 7.1 正则表达式及其作用 151 7.2 正则表达式参考语法 152 7.2.1 限定符 154 7.2.2 选择匹配符 157 7.2.3 分组组合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值