在学习廖雪峰前辈的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中,使用标准对象和包装对象时,需要遵循一下几点:

  1. 不要使用new Number() ,new Boolean() ,new String() 来创建包装对象;
  2. 使用parseInt() 和parseFloat() 可以将任意类型转换为number 类型;
  3. 使用String() 可以将任意类型转换成string 类型,或者直接调用某个对象的toString() 方法;(null,undefined没有此方法)
  4. 一般不用把任意类型转换为 boolean 再判断,直接写成 if (myVar) {...} 即可;
  5. 使用typeof 操作符可以判断出number ,boolean ,string ,function ,undefined ;
  6. 使用Array.isArray(arr) 来判断是不是Array ;
  7. 使用myVar === null 来判断是不是null ;
  8. 使用typeof window.myVar === 'undefined' 来判断某个全局变量是否存在;
  9. 使用typeof myVar === 'undefined' 来判断某个函数内部某个变量是否存在;

  注意:

  • 以上5-9点注意事项,刚好可以判断所有的标准数据类型。
  • 以上第3点注意事项中,并不是所有的对象都有 toString() 方法, null 和 undefined 没有此方法。
  • number 对象调用 toString() 方法时,会报错 SyntaxError :
123.toString(); // SyntaxError

//需要经过如下处理:
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'

JavaScript学习笔记(十四)——对象的更多相关文章

  1. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  2. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  3. JavaScript:学习笔记(10)——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

  4. Javascript学习笔记——操作浏览器对象

    Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...

  5. javascript学习笔记02--面向对象学习

    js面向对象编程 1.  javascript 是一种基于对象的编程    object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...

  6. (C/C++学习笔记) 十四. 动态分配

    十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...

  7. JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)

    1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向 ...

  8. python cookbook第三版学习笔记十四:类和对象(五)代理类以及内存回收

    代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A:     def spam(self,x) ...

  9. JavaScript学习笔记之原型对象

    本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...

  10. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

随机推荐

  1. Java常用类(一)String类详解

    前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结.他们有很多的方法都是我们经常要用到的.所以我们一定要把它好好的掌握起来! 一.String简介 1.1.String(字符串常量)概述 ...

  2. Tomcat针对网站打开速度慢进行局部优化方案

    首先打开tomcat下的conf文件夹里面的server.xml找到Tomcat端口号一栏 <Connector port="8081" protocol="HTT ...

  3. zookeeper 笔记-小结

    1.zookeeper为分布式应用设计的分布式开源协调服务 2.分布式应用可以建立在同步配置管理,选举,分布式锁,分组和命名等服务的更高级别的实现基础上 3.znode维护数据,ACL时间戳等交换版本 ...

  4. MongoDB自动增长

    MongoDB 没有像SQL一样有自动增长的功能,如果我们需要实现ObjectId自动增长功能,可以通过编程的方式来实现.步骤如下: 1. 创建counters集合: db.createCollect ...

  5. phalcon——验证

    一个完整的使用实例:(验证模型数据) use Phalcon\Mvc\Model; use Phalcon\Mvc\Model\Validator\Email as EmailValidator; u ...

  6. IDEA 护眼色设置 背景行颜色取消等设置

    首先做一些简答的记录,护眼色 等等的设置很久以前机器上已经设置过了,今天偶尔要在其他机器上重新做一些设置反而忘记了很多步骤, 设置后的HTML页面如何所示: 默认情况下,当只是设置General通用的 ...

  7. 排序算法总结(C++版)

    总结下学过的排序算法,方便以后用到. 1.插入排序——将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表. void insertSort(int a[],int len) { ; ...

  8. rsync远程数据同步工具的使用

    准备工作 虚拟机1: 192.168.24.41, 用于搭建rsync服务器 虚拟机2: 192.168.26.68, 用于搭建rsync客户端 虚拟机1和虚拟机2均为centos7; 1. 检查虚拟 ...

  9. HTTP服务简介

    第1章 HTTP服务介绍 1.1 简述用户访网站流程 a 进行域名信息的DNS解析   dig +trace 获得www.oldboyedu.com  ip地址信息 b 进行与网站服务器建立连接,tc ...

  10. IdentityServer4 登录使用数据库

    业务场景: IdentityServer4 默认使用TestUser和UserStore,需要模拟和加载所有的用户数据,正式环境肯定不能这样实现,我们想从自己的数据库中读取用户信息,另外,因为 Ide ...