前言

主要介绍了关于 JavaScript 中有关 type 的问题。讲了很多关于各种 type 的 idiosyncrasies.

谈谈JavaScript types

在 JavaScript 中,有两种数据类型:

  • Primitive Types,包括了数值,字符串,布尔值等等
  • Objects,Objects 又包括三个部分
    1.一部分是由 JavaScript 自带的一些,比如:Math;
    2.另外一部分是 the browser 提供的,比如 document; 
    3.还有一部分是用户自己 create 的 objects.
    ##使用 typeof 来确定数据 type 
    格式 console.log(typeof 123);
    typeof 是一个 built-in operator, 可以用它来得到数据的类型。

谈谈 undefined 这个 type

定义:

undefined 是一个值(value),它属于 undefined 类型的变量。
有三种情况属于 undefined :

  • variable 的情况:这个 variable 没有进行 initialize
  • array 的情况:这个 array item 不存在
  • object 的情况: 这个 property 没有 value,或者它的 value 被 delete.

与 null 的区别

null 的定义:null is intended to represent an object that isn't there.
null 的 type: object
场合:当使用 getElementById('id') 的时候,如果不存在这个 id 代表的 element object, 将会返回一个 null 值。

与 NaN 的区别:

NaN 的定义: NaN 是“Not a Number" 的简写形式,它表示 value that is a value but can't be represented
场合

  • var c = Math.sqrt(-9);
  • var b = "food" * 1000;
  • var a = 0/0 判别 NaN 的方法:由于 NaN 是唯一不等于自身的 value,所以通过 isNaN() 这个 funcition 来判断是否为 NaN.

== 与 === 的区别

定义

在进行 == 的运算的时候,会进行 type conversion, 并遵守一定的 rules,但是 === 是严格意义的判断是否相等(即数据类型和值全都相等)
== 在进行 conversion 的rules 包括两层:

当两个 operands 's type相同:

对它们的 value 进行比较:

当两个 operands 数据类型不同:

先进行类型的转换,在进行比较,有下面3种情况:

  1. string 和 number:先将 string 转换成 number,然后再将转换成的 number 与 一开始的 number 进行比较。
  2. boolean 和 any other type:现将 boolean 转换成 number, 然后在进行比较。
  3. null 和 undefined:these values both essentially represent "no value",(that is, a variable with no value, or an object with no value), so they're considered to be equal.

错题:“true" == true; 返回值为 false.

+,-,*,/ 时进行的 type conversion

+ 进行的 type conversion

规则:当其中的一个 operand 的 type 为 string 类型的时候,+ 会作为一个 concatenate oprator,将另一个 type 的值转换为 value.

其他 arithmetic operator 进行的 type conversion

规则:当其中有 arithmetic operator 的时候,会将其中的 string 类型转换为 number 类型,然后再进行计算。

truthy 和 falsey 类型 的值

定义:They aren't technically true or false, but they behave like they are.
进行判断的 secret: concentrate on knowing what is falsey,and then everything else you can consider truthy.
falsey 的五种类型:

  1. undefined
  2. null
  3. 0
  4. ""
  5. NaN

关于 String

String 既是 primitive type, 也属有 object,因此可以用于打印,也可以调用它的一些 property 和 method.

与 string 有关的 property

  • length:得到 string 的长度
    ##与 string 有关的 method
  • indexOf('string',y),得到相关字符串第一次出现的 index 值,y 值表示从 index 为.. 开始,它是 optional 的
  • split("|"),用 delimiter 将字符串对象分开之后,返回一个 含有各个 piece 的 array
  • substring(x,y),得字符串 index 从 x 到 y (不包含 y)的值。

JavaScript 第七章总结的更多相关文章

  1. javascript第七章--DOM

    ① 节点层次 ② DOM操作技术

  2. 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表

    本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...

  3. [书籍翻译] 《JavaScript并发编程》第七章 抽取并发逻辑

    本文是我翻译<JavaScript Concurrency>书籍的第七章 抽取并发逻辑,该书主要以Promises.Generator.Web workers等技术来讲解JavaScrip ...

  4. 读《编写可维护的JavaScript》第七章总结

      第七章 事件处理 7.1 典型用法 作者首先给了个我们一个处理事件的方法.看起来也没啥俩样,不过后来给出的优化方法很值得学习: // 不好的写法 function handleClick(even ...

  5. JavaScript DOM编程艺术-学习笔记(第七章)

    第七章: 1.dom方法创建并且插入标签:(这种方法并没有改变文档的物理内容,而是在改变dom树) ①创建元素节点:createElement(); ②内部前插入:appendChild() ③创建文 ...

  6. ArcGIS API for JavaScript 4.2学习笔记[24] 【IdentifyTask类】的使用(结合IdentifyParameters类)(第七章完结)

    好吧,我都要吐了. 接连三个例子都是类似的套路,使用某个查询参数类的实例,结合对应的Task类,对返回值进行取值.显示. 这个例子是Identify识别,使用了TileLayer这种图层,数据来自Se ...

  7. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  8. 【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)

    第一章 javascript概述 ①.javascript是一种松散类型语言;也是一种解释型语言;         第二章 词法结构 ①.大小写敏感         第三章 数据类型和值 ①.isFi ...

  9. Knockout应用开发指南 第七章:Mapping插件

    原文:Knockout应用开发指南 第七章:Mapping插件 Mapping插件 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些 ...

随机推荐

  1. 【转】java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  2. QML手动连接信号槽【Connections】

    1.使用Connections import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 Window { vi ...

  3. 并发 ---- 6. IO 多路复用

    一.阻塞IO 1.代码示例 2.图形示例: 二.非阻塞IO 设置不阻塞(server.setblocking(False)),利用 try...except. 当被阻塞时, 执行except 事件, ...

  4. topcoder srm 684 div1

    problem1 link 首先由$P$中任意两元素的绝对值得到集合$Q$.然后枚举$Q$中的每个元素作为集合$D$中的最大值$Max$,这样就能确定最后集合$D$中的最小值要大于等于$Min=\fr ...

  5. Java——List:list.add(index, element)和list.set(index, element)的区别

    add(index, element) 含义:在集合索引为index的位置上增加一个元素element,集合list改变后list.size()会增加1 用法 testList.add(index, ...

  6. ODAC(V9.5.15) 学习笔记(十二)TOraLoader

    名称 类型 说明 Columns TDAColumns 需要载入数据的每个字段定义 LoadMode TLoadMode 载入模式,包括: lmDirect 通过内部数据缓冲区载入到数据库中 lmDM ...

  7. html的初了解(更新中···)

    (注:在学习时要养成一个良好的习惯,即每次写完都随手保存,快捷键为ctrl+s.即每次写完都随手点一下ctrl+s.) html是万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言. 网页的 ...

  8. Ubuntu 使用unzip解压乱码的问题

    由于win使用的是GBK编码,在win下打包zip的压缩文件在ubuntu下使用unzip解压会出现乱码的问题. 解决方案: 换软件,不用unzip,使用unar 18.04是默认安装的,如果没有默认 ...

  9. Java基础 【自动装箱和拆箱、面试题】

    JDK 1.5 (以后的版本)的新特性自动装箱和拆箱 1. 自动装箱:把基本类型转换为包装类类型 int a =10; Integer i = new Integer(a); Integer valu ...

  10. Lintcode415-Valid Palindrome-Medium

    Given a string, determine if it is a palindrome, considering only alphanumeric(字母和数字) characters and ...