JavaScript学习笔记(十四)——对象
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意!
如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/学习。
标准对象
在JavaScript的世界里,万物皆对象。
但是对象与对象之间也有区别。为了区分对象的类型,我们可以用 typeof 操作符来获取对象的类型,它总是返回一个对象的类型:
- typeof 123; // 'number'
- typeof NaN; // 'number'
- typeof 'str'; // 'string'
- typeof true; // 'boolean'
- typeof undefined; // 'undefined'
- typeof Math.abs; // 'function'
- typeof null; // 'object'
- typeof []; // 'object'
- typeof {}; // 'object'
从上面的例子我们可以看出, number , string , boolean , undefined , function 不同于其他的类型。 null 的类型是 object , Array 的类型也是 object ,所以,通过 typeof 操作符,我们无法区分 null ,Array 和通常意义上的 object —— { } 。
包装对象
除了以上这些标准类型外,JavaScript还提供了包装对象,就好像Java里面 int 与 Integer 的关系。
在JavaScript中, number , boolean , string 都有它们对应的包装对象。包装对象用 new 来创建。
- var n = new Number(123); // 123,生成了新的包装类型
- var b = new Boolean(true); // true,生成了新的包装类型
- var s = new String('str'); // 'str',生成了新的包装类型
虽然包装对象看上去和原来的值一模一样,但是它们的类型已经变成了 object 类型,所有,用 == 来比较包装对象和原始值,会返回 false 。
- typeof new Number(123); // 'object'
- new Number(123) === 123; // false
- typeof new Boolean(true); // 'object'
- new Boolean(true) === true; // false
- typeof new String('str'); // 'object'
- new String('str') === 'str'; // false
所以在非必要情况下,不要随意使用包装对象,尤其是针对string类型。
注意:如果我们在使用 Number , Boolean 和 String 时,没有用new关键字来创建对象, Number() , Boolean() , String() 会被当做普通对象,把传入的任何类型的数据转换为 number , boolean , string 类型(不是其包装类型):
- var n = Number('123'); // 传入字符串“123”,相当于parseInt()或parseFloat()
- typeof n; // 'number' 123
- var b = Boolean('true'); // 传入字符串“true”,结果为true
- typeof b; // 'boolean'
- var b2 = Boolean('false'); //传入字符串'false',结果为true!因为它是非空字符串!
- var b3 = Boolean(''); // 空字符串,结果为false
- var s = String(123.45); // 传入数字123.45,结果为string字符串‘123.45’
- typeof s; // 'string'
总结
在JavaScript中,使用标准对象和包装对象时,需要遵循一下几点:
- 不要使用new Number() ,new Boolean() ,new String() 来创建包装对象;
- 使用parseInt() 和parseFloat() 可以将任意类型转换为number 类型;
- 使用String() 可以将任意类型转换成string 类型,或者直接调用某个对象的toString() 方法;(null,undefined没有此方法)
- 一般不用把任意类型转换为 boolean 再判断,直接写成 if (myVar) {...} 即可;
- 使用typeof 操作符可以判断出number ,boolean ,string ,function ,undefined ;
- 使用Array.isArray(arr) 来判断是不是Array ;
- 使用myVar === null 来判断是不是null ;
- 使用typeof window.myVar === 'undefined' 来判断某个全局变量是否存在;
- 使用typeof myVar === 'undefined' 来判断某个函数内部某个变量是否存在;
注意:
- 以上5-9点注意事项,刚好可以判断所有的标准数据类型。
- 以上第3点注意事项中,并不是所有的对象都有 toString() 方法, null 和 undefined 没有此方法。
- number 对象调用 toString() 方法时,会报错 SyntaxError :
- 123.toString(); // SyntaxError
- //需要经过如下处理:
- 123..toString(); // '123', 注意是两个点!
- (123).toString(); // '123'
JavaScript学习笔记(十四)——对象的更多相关文章
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...
- JavaScript:学习笔记(10)——XMLHttpRequest对象
JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...
- Javascript学习笔记——操作浏览器对象
Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...
- javascript学习笔记02--面向对象学习
js面向对象编程 1. javascript 是一种基于对象的编程 object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...
- (C/C++学习笔记) 十四. 动态分配
十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...
- JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)
1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向 ...
- python cookbook第三版学习笔记十四:类和对象(五)代理类以及内存回收
代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A: def spam(self,x) ...
- JavaScript学习笔记之原型对象
本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
随机推荐
- git 合并两个仓库
我有两个仓库,一个是gitbook在写一本 一个是放在github的垃圾,这个是我想要开个人网站,但是做的还是不行https://github.com/lindexi/lindexi.github.i ...
- vim搭建笔记
在接触vim近一年后,自己的vimrc都是拼凑别人的,所以有很多插件和配置并不会使用 现在,我决定,花费一天时间,一步一步的搭建自己的vim配置! 去该网址下载安装vim http://www.vim ...
- php中常用的字符串格式化函数
ltrim():从字符串左删除空格或其他预定义字符串 rtrim():从字符串的末端开始删除空白字符串或其它预定义字符 trim():从字符串的两端删除空白字符和其他预定字符 str_pad():把字 ...
- .net 面试题
1.列举ASP.NET页面之间传值的几种方式. 答:使用QueryString,如.../id=1;response.Redirect() 使用Session 使用Server.Transfer 使用 ...
- 常用Linux操作命令
查看物理CPU个数:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中的核数:cat /proc ...
- web开发|如何选择合适的webui框架
在市场中很多人分不清框架和库的区别,部分只知道框架模糊的概念.所以在选择webUI框架的时候就会仁者见仁智者见智,会存在各抒己见也是很正常的,这里整体都叫框架吧,在市场中不断的淘汰与创新,主要以Vue ...
- 启动关闭zookeeper集群的脚本
启动hadoop Ha集群是,每次都要手动启动每个zk节点,实在是太麻烦了.于是乎自己写了个脚本startAllZK.sh: 需要启动的节点,先在 NODENAME_ARR 数组中配置好,zkServ ...
- 读书笔记-你不知道的JS上-声明提升
变量声明提升 Javascript代码一般情况下是由上往下执行的,但是有些情况下不成立. a = 2; //变量声明被提升在当前作用域顶部 var a; console.log(a); console ...
- 微信小程序用setData修改数组或对象中的一个属性值
在page中有如下数组 data: { info:[ { name:"yuki", tou:"../img/head.jpg", zGong:130, gMon ...
- ssh免密码记录
主机器A通过ssh连多台从机器(b1,b2,b3). 1.使用root用户操作,避免权限问题. 2.在主从机器中安装ssh,命令: ssh-keygen –t rsa 然后都回车,生成的文件在/roo ...