资讯专栏INFORMATION COLUMN

JavaScript 数据类型(一)

Charlie_Jade / 2321人阅读

摘要:默认情况下,会将小数点后面带有个零以上的浮点数值转换为科学计数法。有效,不推荐小数点后没有数字,解析为整数,解析为科学计数法。字符字面量数据类型包含一些特殊的字符字面量,也叫转义序列。

Undefined 类型

只有一个值,即特殊的 undefined。声明了但未对其加以初始化时,这个变量的值就是undefined。对未声明的变量使用typeof操作符会返回undefined。但是其它操作的话就会报错。

console.log(typeof foo) // "undefined"
console.log(foo) // ReferenceError

关于 undefined 还有一种严谨的做法就是通过 void 0 来实现。这样实现的原因是 undefined 不是 JavaScript 的关键字,也就是说可以将 undefined 作为标识符,或者说 window.undefined 的值是可以被修改的。

Null 类型

只有一个值,即特殊的 null。从逻辑角度来看,null值表示一个空对象指针,所以使用typeof操作符检测null值返回object

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null
Boolean 类型

主要介绍 Boolean() 函数

console.log(Boolean("a")) // true
console.log(Boolean("")) // false
console.log(Boolean(1)) // true
console.log(Boolean(0)) // false
console.log(Boolean(-1)) // true
console.log(Boolean(NaN)) // false
console.log(Boolean(Infinity)) // true
console.log(Boolean(-Infinity)) // true
console.log(Boolean({})) // true
console.log(Boolean(null)) // false
console.log(Boolean(undefined)) // false
Number 类型

采用IEEE754格式来表示整数和浮点数值。

// 十进制

const intNum = 55; 

// 八进制 -- 第一位必须是 0 ,后面是八进制数字序列(0 ~ 7)在严格模式下无效,并抛出错误。

const octalNum1 = 070; // 八进制的 56
const octalNum2 = 079; // 无效的八进制数值--解析为79
const octalNum3 = 08; // 无效的八进制数值--解析为8

// 十六进制 -- 前两位必须是 0x ,后面是十六进制数字(0 ~ 9 及 A ~ F),字母 A ~ F 不分大小写。

const hexNum1 = 0xA; // 十六进制的10
const hexNum1 = 0x1f; // 十六进制的31

在进行算数运算时,所有八进制和十六进制的数值都将被转换为十进制数值。

浮点数值

最高精度是17位小数。

默认情况下,ECMAScript会将小数点后面带有6个零以上的浮点数值转换为科学计数法。

永远不要测试某个特定的浮点数值。

const floatNum1 = .1; // 有效,不推荐
const floatNum2 = 1.; // 小数点后没有数字,解析为1
const floatNum3 = 10.0; // 整数,解析为10
const floatNum4 = 3.125e7; // 科学计数法。3.125乘以10的7次方。等于 31250000。

//判断两个数是否相等
function equal(n1, n2) {
    return Math.abs(n1 - n2) < Number.EPSILON;
}
equal(0.1 + 0.2, 0.3) // true
数值范围

Number.MIN_VALUE。最小数值,多数浏览器这个值是 5e-324

Number.MAX_VALUE。最大数值,多数浏览器这个值是 1.7976931348623157e+308

如果超出范围就会自动转为特殊的 Infinity 值,如果是正数就是 Infinity(正无穷),负数就是 -Infinity(负无穷)。

isFinite() 函数判断一个数是否是有穷的。

Number.NEGATIVE_INFINITY。负无穷的值。

Number.POSITIVE_INFINITY。正无穷的值。

NaN

任何涉及NaN的操作都会返回NaN。

NaN不等于任何值,包括NaN本身。

通过 isNaN() 函数检查传入的参数是否“不是数值”。

console.log(0/0); // NaN
console.log(10/0); // Infinity
console.log(-10/0); // -Infinity
console.log(10/"a"); // NaN
console.log(10/""); // Infinity
console.log(10/undefined); // NaN
console.log(10/true); // 10
console.log(10/false); // Infinity 
console.log(10/null); // Infinity

console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN("10")); // false -- 可以被转换成数值10
console.log(isNaN("blue")); // true -- 不能转换成数值
console.log(isNaN(true)); // true -- 可以被转换成数值 1

// isNaN() 也适用于对象。会先调用对象的 valueOf() 方法,如果返回值不能转换为数值,则基于这个返回值再调用 toString() 方法,再测试返回值。

数值转换

Number()

parseInt()

parseFloat()

console.log(Number(10)); // 10
console.log(Number("")); // 0
console.log(Number("abc")); // NaN
console.log(Number("000011")); // 11
console.log(Number("123abc")); // NaN
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(undefined)); // NaN
console.log(Number(null)); // 0

// 使用 parseInt() 推荐始终带上第二个参数:转换时使用的基数(即多少进制)。
console.log(parseInt(22.5); // 22
console.log(parseInt("")); // NaN
console.log(parseInt("70")); // 70
console.log(parseInt("123abc")); // 1234
console.log(parseInt("070")); // ECMAScript 5 认为是70(十进制),ECMAScript 3 认为是56(八进制)
console.log(parseInt("0xA")); // 10
console.log(parseInt("0xf")); // 15

// parseFloat() 会解析每个字符,或解析到遇见一个无效的浮点数字符为止。而且始终会忽略前导的零。只解析十进制值。

console.log(parseFloat("22.5")); // 22.5
console.log(parseFloat("123abc")); // 123
console.log(parseFloat("0xA")); // 0
console.log(parseFloat("22.34.5")); // 22.34
console.log(parseFloat("0908.5")); // 908.5
console.log(parseFloat("3.125e7")); // 31250000
String 类型

String 类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。任何字符串的长度都可以通过访问其length属性取得。

字符字面量
String数据类型包含一些特殊的字符字面量,也叫转义序列。
字面量 含义
换行
制表
 退格
回车
f 进纸
斜杠
" 单引号 ( " ) ,在用单引号表示的字符串中使用,例如: "He said,  "hey." "
" 双引号 ( " ) ,在用双引号表示的字符串中使用,例如: "He said,  "hey." "
xnn 以十六进制代码 nn 表示的一个字符(其中 n 为 0 ~ F)。例如, x41 表示 "A"
unnnn 以十六进制代码 nnnn 表示的一个 Unicode 字符(其中 n 为 0 ~ F)。例如, u03a3 表示希腊字符 Σ
转换为字符串

1. toString()
除了nullundefined没有这个方法,其它都有。有一个参数:输出数值的基数,默认是十进制。

const num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"
console.log(num.toString(8)); // "12"
console.log(num.toString(10)); // "10"
console.log(num.toString(16)); // "a"

const bool = true;
console.log(bool.toString()); // "true"

const obj = {};
console.log(obj.toString()); // "[object Object]"

const func = function() {};
console.log(func.toString()); // "function() {}"

const nul = null;
console.log(nul.toString()); // TypeError: Cannot read property "toString" of null

const unde= undefined;
console.log(unde.toString()); // TypeError: Cannot read property "toString" of undefined

2. String()
在不知道要转换的值是不是nullundefined的情况下,还可以使用转型函数String(),这个可以将任何类型的值转为字符串。遵循以下转换规则

如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;

如果值是null,则返回"null"

如果值是undefined,则返回"undefined"

3. 使用加号操作符与一个字符串(" ")加在一起

const bool = true;
console.log(bool + ""); // "true"

const nul = null;
console.log(nul + ""); // "null"

const unde= undefined;
console.log(unde + ""); // "undefined"
typeof 操作符
// typeof的操作数可以是变量也可以是字面量
console.log(typeof foo) // "undefined"
console.log(typeof true) // "boolean"
console.log(typeof "abcd") // "string"
console.log(typeof 1) // "number"
console.log(typeof null) // "object"
console.log(typeof {}) // "object"
console.log(typeof function(){}) // "function"
参考

《JavaScript高级程序设计》(第三版)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/54046.html

相关文章

  • JavaScript学习总结()基础部分

    摘要:前缀规范每个局部变量都需要有一个类型前缀,按照类型可以分为表示字符串。例如,表示以上未涉及到的其他对象,例如,表示全局变量,例如,是一种区分大小写的语言。布尔值与字符串相加将布尔值强制转换为字符串。 基本概念 javascript是一门解释型的语言,浏览器充当解释器。js执行时,在同一个作用域内是先解释再执行。解释的时候会编译function和var这两个关键词定义的变量,编译完成后从...

    AlanKeene 评论0 收藏0
  • JS程序

    摘要:设计模式是以面向对象编程为基础的,的面向对象编程和传统的的面向对象编程有些差别,这让我一开始接触的时候感到十分痛苦,但是这只能靠自己慢慢积累慢慢思考。想继续了解设计模式必须要先搞懂面向对象编程,否则只会让你自己更痛苦。 JavaScript 中的构造函数 学习总结。知识只有分享才有存在的意义。 是时候替换你的 for 循环大法了~ 《小分享》JavaScript中数组的那些迭代方法~ ...

    melody_lql 评论0 收藏0
  • 《JSON必知必会》学习笔记(

    摘要:基于对象字面量,但是独立于任何编程语言,真正重要的是表示法本身,所以在学习之前不必先学习。键必须是字符串,值可以是合法的数据类型字符串数字对象数组布尔值或。布尔类型中的布尔值仅可使用小写形式或,其他任何写法都会报错。 什么是JSON JSON全称是Javascript Object Notation(对象表示法),是一种在不同平台间传递数据的文本格式(数据交换格式)。常见的数据交换格式...

    rickchen 评论0 收藏0
  • 《JSON必知必会》学习笔记(

    摘要:基于对象字面量,但是独立于任何编程语言,真正重要的是表示法本身,所以在学习之前不必先学习。键必须是字符串,值可以是合法的数据类型字符串数字对象数组布尔值或。布尔类型中的布尔值仅可使用小写形式或,其他任何写法都会报错。 什么是JSON JSON全称是Javascript Object Notation(对象表示法),是一种在不同平台间传递数据的文本格式(数据交换格式)。常见的数据交换格式...

    imccl 评论0 收藏0
  • JavaScript基本语法(

    摘要:目录语句变量小结基本语法一是核心知识点的基本语法的第一部分,主要介绍了语句表达式变量和数据类型不包括函数类型的基本知识点,函数类型将在下一章函数二中详细探讨语句程序的执行是由一条条语句组成的每一条语句是为完成特定任务而执行的操作语句当中可以 目录 1. 语句 2. 变量 3. 小结 JavaScript基本语法(一)是JavaScript核心知识点(ECMAScript)的基本语法的...

    shiina 评论0 收藏0
  • JavaScript的语言特性以及重要版本

    摘要:通常一个完成的不仅仅包含了还包括了以及相关版本该版本在中使用。基于原型函数先行的语言使用基于原型的的继承机制,函数是的第一等公民其他相关的语言特性编译型语言把做好的源程序全部编译成二进制代码的可运行程序。 转载请注明出处,创作不易,更多文章请戳 https://github.com/ZhengMaste... 前言:JavaScript诞生于1995年,它是一门脚本语言,起初的目...

    Yangder 评论0 收藏0

发表评论

0条评论

Charlie_Jade

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<