js 类型转变
在绝大部分情况下,操作符和函数可以自动将一个值转换成正确的数据类型。这被称为”类型转变(type conversion)”。
举个例子,alert 自动转变任何类型的参数为字符串类型,并显示该字符串。数学操作符转变参数为数值类型并进行操作。
但在某些情况下,为了获得正确的操作结果,需要开发者自己明确地转变参数为正确类型。
暂时不涉及 object 类型
在本章节中,我们先不涉及 object 类型。此处,我们先学习原始类型。在我们学习了 object 类型之后,我们将在 [对象到原始类型的转变] 中学习 object 转变到原始类型的更多细节。
ToString
当需要一个值的字符串形式的时候,字符串转变就会发生。
举个例子,alert(value) 在显示结果之前,就会完成值到字符串形式的转变。
为了达到同样的功能(字符串转变),我们也可以执行一个 String(value) 调用:
let value = true;
alert(typeof value); // boolean
value = String(value); // now value is a string "true"
alert(typeof value); // string
字符串转变是非常明显的,一个 false 变成了一个 “false”,null 变成了一个"null" 等。
ToNumber
在数学函数和表达式中,数值转变会自动发生。
举个例子,当除法 / 操作符应用于非数值时:
alert( "6" / "2" ); // 3, strings are converted to numbers
此外,开发者可以使用一个 Number(value) 函数来明确地转换该value:
let str = "123";
alert(typeof str); // string
let num = Number(str); // becomes a number 123
alert(typeof num); // number
如果从一个基于字符串的数据源,比如一个文本域,读取变量,而且,我们开发者又期望读入的是一个数值。此时,开发者很可能就需要明确地进行数值转变。
如果此时输入的字符串不是一个合法的数值,整个的转变结果就是一个 NaN,举个例子:
let age = Number("an arbitrary string instead of a number");
alert(age); // NaN, conversion failed
变量的转变规则如下:
参数 结果
undefined NaN
null 0
true and false 1 and 0
string 开头和结尾的空白符被去除。然后,如果剩余字符串为空,结果就为 0。否则,结果就为字符串中读取到的值。如果出错,结果就为 NaN。
举个例子:
alert( Number(" 123 ") ); // 123
alert( Number("123z") ); // NaN (error reading a number at "z")
alert( Number(true) ); // 1
alert( Number(false) ); // 0
注意:在转变为数值时,null 和 undefined 需要区别对待:null 转变成 0, undefined 转变成 NaN。
加号“+” 连接字符串
几乎所有的数学操作符都会把参数转变成数值。但是,加号“+” 是一个需要区别对待特例。如果加号操作的某一个参数为 string,那么另一个参数也会被转变为 string。然后,它们就会被连接起来:
alert( 1 + '2' ); // '12' (string to the right)
alert( '1' + 2 ); // '12' (string to the left)
注意:这只在加号操作的两个参数中至少有一个是 string 时才发生。否则的话,参数会被转变成数值类型,并执行数学加法操作。
ToBoolean
布尔转变是最简单的转变。
它会自动发生于逻辑操作(我们将学习到条件测试和其他类型的逻辑操作)中,但是,也可以通过调用 Boolean(value) 来手动执行布尔转变。
布尔转变的规则如下:
那些直观上为空的值,比如0,空字符串,null,undefined和 NaN 等,就转变成 false。
其他的值转变成 true。
参数 结果
0,null,undefined,NaN,"" false
任何其他值 true
举个例子:
alert( Boolean(1) ); // true
alert( Boolean(0) ); // false
alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
字符串“0” 的布尔值为true
某些语言(比如 PHP)把字符串“0” 看待为false。但在 JavaScript 中,任何非空的字符串都是 true。
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)
总结
在 JavaScript 中,存在三个被广泛使用的类型转变:字符串转变、数值转变、布尔转变。
ToString——当我们需要输出某些东西时,也可以通过String(value)显式执行。原始类型变量的字符串转变是非常简单和明显的。
ToNumber——当在数学操作符和表达式中发生,也可以通过Number(value)显式执行。
ToBoolean——当在逻辑操作中发生,也可以通过Boolean(value)显式执行。
绝大部分的转换规则都是非常容易理解和记忆的。一般的,开发者最容易犯错、最值得注意的异常情况是:
undefined 进行数值转换,转成 NaN,而不是0。
“0” 和仅含有空白字符的字符串" " 进行布尔转换,转成 true。
关于 object 的转变内容,我们将在对象转变 一节中进行详细讲解。那是,我们将已经学习了更多 JavaScript 的对象知识。
任务
类型转变
importance:5
下列表达式的运算结果是什么?
"" + 1 + 0
"" - 1 + 0
true + false
6 / "3"
"2" * "3"
4 + 5 + "px"
"$" + 4 + 5
"4" - 2
"4px" - 2
7 / 0
" -9\n" + 5
" -9\n" - 5
null + 1
undefined + 1
仔细思考后,写下你的答案,并且和程序的实际运行结果进行比较。
转自:http://www.tiantianbianma.com/type-convert.html/
js 类型转变的更多相关文章
- JS类型(1)_JS学习笔记(2016.10.02)
js类型 js中的数据类型有undefined,boolean,number,string,null,object等6种,前5种为原始类型(基本类型),基本类型的访问是按值访问的,就是说你可以操作保存 ...
- Js 类型方面的神坑
你有没有遇见过本来好好的一个数组结果 typeof 出来是个 object 的情况,你有没有遇到过非要写个 typeof x === "undefined" 判断未赋值的情况... ...
- js 类型之间的相互转化
设置元素对象属性 var img = document.querySelector("img") img.setAttribute("src","ht ...
- JS类型转换规则详解
JS类型转换规则详解 一.总结 一句话总结:JS强制类型转换中的类型名强制类型转换和其它语言不同,是类型类的构造方法,Number(mix) 一句话总结(JS类型本质):因为js是弱类型语言,所以它相 ...
- js类型比较
比较数据类型做比较的三种方法typeofinstanceofObject.prototype.toString.call() javascript七大类型 javascript的数据类型分为两类:原始 ...
- JS类型判断&原型链
JS类型检测主要有四种 1.typeof Obj 2.L instanceof R 3.Object.prototype.toString.call/apply(); 4.Obj.constructo ...
- JS类型(2)_JS学习笔记(2016.10.02)
undefined undefined是全局对象(window)的一个特殊属性,其值是未定义的.但 typeof undefined 返回 'undefined' . 虽然undefined是有特殊含 ...
- js类型判断及鸭式辨型
目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof ...
- 常用js类型相互转换
数字转换为字符串 var a=200.21;document.write(a.toString(10)); 结果为:200.21以十进制转换 document.write(a.toFixed(3)) ...
- 类型和原生函数及类型转换(二:终结js类型判断)
typeof instanceof isArray() Object.prototype.toString.call() DOM对象与DOM集合对象的类型判断 一.typeof typeof是一个一元 ...
随机推荐
- 互联网_http协议
一.定义 http协议叫做超文本传输协议,是从web服务器传输超文本到本地浏览器的协议. 二.特征 1.无连接:即每次连接仅处理一个请求,服务器处理完客户的请求,并收到客户端的响应后,即断开连接.采用 ...
- windows 安装使用 Memcached
Windows无官方版本:下载地址http://static.runoob.com/download/memcached-win64-1.4.4-14.zip 安装: 1.解压下载的压缩包2.命令行模 ...
- oracle存储过程错误跟踪
1.首先创建用于保存错误信息的表 1 2 3 4 5 6 7 8 CREATE TABLE TBL_PROC_ERRMSG ( BIZ_CODE VARCHAR2(50), ERR_LINE ...
- navicat常用快捷键与SQL基本使用
一.Navicat常用快捷键 1,Ctrl+q就会弹出一个sql输入窗口 2,Ctrl+r就执行sql了 3,按f6会弹出一个命令窗口 4,Ctrl+/ 注释 5,Ctrl +Shift+/ 解除注释 ...
- DPM(物体检测)
1.DPM(物体检测流程) 1.计算DPM特征图 2.计算响应图 3.使用SVM对响应图进行分类 4.对最后的选框做局部检测识别 DPM的梯度提取方向,将图片中的四个区域进行区分,将有符号梯度方向从0 ...
- centos7 搭建测试环境
1. 下载JDK8 地址:https://download.oracle.com/otn/java/jdk/8u221-b11/230deb18db3e4014bb8e3e8324f81b43/jdk ...
- java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern
https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之 ...
- JavaEE-实验二 Java集合框架实验
该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1. 使用类String类的分割split 将字符串 “Solutions to selected exercises ca ...
- React事件方法、React定义方法的几种方式、获取数据、改变数据、执行方法传值
1.案例实现代码如下 import React, { Component } from 'react'; /** * 特别注意this,对于传值和绑定都十分重要 */ class Home4 exte ...
- zabbix使用脚本监控
参照:http://www.cnblogs.com/zhongkai-27/p/9984597.html