美文网首页
红宝书笔记-数据类型

红宝书笔记-数据类型

作者: 拾起落叶好过冬 | 来源:发表于2017-12-10 21:35 被阅读9次

数据类型

使用typeof判断类型注意点

typeof可以用来判断数据类型,但是,对于复杂类型无能为力,比如

typeof null //object

typeof /^abc$/ //object

typeof [1,2,3] //object

typeof new Date() //object

typeof undefined //undefined

typeof function(){return 1;} //function

可以看到,null、数组、正则、日期几种类型都返回object,若完美判断类型最好使用Object.prototype.toString.call 的方法。

undefined 和 null

undefined表示定义的变量未赋予任何值,自动会得到undefined。
但注意区别

var message;
console.log(message);   //undefined;
console.log(info);  //报错 info is not defined

以上,message变量声明了,但没有手动赋值,因此自动得到了undefined,但是info变量连声明都没有,所以是会报错的。

为什么undefined == null为真?

原理是因为在javascript中,undefined值派生自null,因此ECMA-262规定它们相等

对象转布尔值的规则

javascript中任何一种类型都能转换为布尔(boolean)值,转换的规则如下:

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 ""空字符串
Number 任何非零数字(包括无穷大) 0 和 NaN
Object 任何对象 null
Undefined 不适用 undefined

举几个栗子:

Boolean({});        //true
Boolean(null);      //false
Boolean(undefined); //false
Boolean(100);       //true
Boolean(Infinity);  //true
Boolean(NaN);       //false

Number数值类型

浮点数的计算

在javascript中,小数点右侧有值才会当做浮点数处理,比如1.2,如果小数点右则无值或是0,都当做整数来处理如:1.0。

javascript中由于使用IEEE754来处理浮点数,因此千万不要使用浮点数计算后的结果进行比较!举个栗子:

0.1+0.2 //0.30000000000000004

并不是你想象的0.3。

NaN

NaN在javascript中是一个特殊的数值,表示“不是一个数字”(Not a Number),javascript中引入NaN是为了处理数值操作返回未知的情况,这样就不会抛出错误终止程序运行了(比如java就会抛错)。

0/0 //0除0,的结果是NaN
Number('hello') //转换数值类型失败时也是NaN

NaN与任何值进行计算还是NaN

NaN + 1 //NaN

NaN与任何值比较都不相等,自己也是

NaN == false    //false
NaN == 0        //false
NaN == 1        //false
NaN == null     //false
NaN == NaN      //false

若想判断是不是NaN,应使用isNaN()函数

数值转换

转换为数值类型有几个规则

  1. 如果是布尔值,true转为1,false转为0
  2. 如果是数值,直接返回
  3. 如果是null,转为0
  4. 如果是undefined,转为NaN
  5. 如果是字符串,比较复杂,有以下规则:
    • 如果字符串中是数字,则直接转换为对应的数值
    • 如果字符串是空的,则转换为0
    • 如果字符串中包含上述格式之外的字符,则转换为NaN
  6. 如果是对象,也比较复杂,有以下规则:
    • 调用目标的valueOf方法,然后按以上步骤转换,如果结果是NaN,再调用toString方法,按以上步骤返回转换的字符串值

String字符串

转换为String类型

转换为String类型有以下规则:

  1. 如果目标对象有toString方法,调用并返回结果
    • 对象的toString返回[object Object]
    • 函数的toString返回函定义的字符串形式
    • 空数组返回""
    • 有内容的数组toString返回和join方法一致
  2. 如果值是null,返回"null"
  3. 如果值是undefined,返回"undefined"

Object

javascript中Object用来定义对象,Object是所有对象的基础。

var obj1=new Object();
var obj2={};

以上两种写法都可以正确定义对象,推荐第二种写法。

每个Object对象实例都有以下方法:

  • constructor: 保存着用于创建当前对象的函数(目前constructor就是Object())
  • hasOwnProperty: 检查属性是否是当前实例属性(若是在原型链上返回false)
  • isPrototypeOf: 检查传入的对象是否是传入对象的原型
  • propertyIsEnumerable: 传入的属性能否被for...in 枚举到
  • toLocalString: 返回本地字符串的表现形式
  • toString: 返回字符串表现形式
  • valueOf: 返回对象的字符串、数值或是布尔值的表现形式

相关文章

  • 红宝书笔记-数据类型

    数据类型 使用typeof判断类型注意点 typeof可以用来判断数据类型,但是,对于复杂类型无能为力,比如 ty...

  • 红宝书阅读笔记(1)

    前言 虽然一直都在用js,没有正经看过几本js的书。久仰红宝书大名(《JavaScript高级程序设计》),这段时...

  • 红宝书读书笔记

    ——DISC国际双证班顺后跟进第五次打卡 略读红宝书,对DISC所包含的内容有了更深一步的理解,整本书从为什么要学...

  • #红宝书一周共读#D02

    #红宝书一周共读#20180905 P26-50 三点笔记(笔记为书中 你最有感触的内容) 1、D特质:关注事情,...

  • #红宝书一周共读#D03

    #红宝书一周共读#20180906 P43-91 三点笔记(笔记为书中 你最有感触的内容) 1、表现 D往往在组织...

  • 《DISCover自我探索》7日共读-D01

    打卡记录(P1-25) 1.刘丽爽 #红宝书一周共读#20180903 三点笔记(笔记为书中 你最有感触的内容) ...

  • 《DISCover自我探索》7日共读-D03

    打卡记录(P51-75) 1.浦丽娜 #红宝书一周共读#20180906 P43-91 三点笔记(笔记为书中 你最...

  • JavaScript

    JavaScrpit笔记 数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefin...

  • 嚐试输出的日子

    打卡格式为 #红宝书一周共读#20180904 许斐琅 三点笔记(笔记为书中 你最有感触的内容) 1、认织不等于了...

  • 2018-11-25java 数据类型笔记

    java 数据类型笔记 分类:A.基本数据类型。B,引用数据类型。 基本数据类型:4类8种。 一,整数。 byte...

网友评论

      本文标题:红宝书笔记-数据类型

      本文链接:https://www.haomeiwen.com/subject/mjxbixtx.html