IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> javascript中的隐式转换 -> 正文阅读

[JavaScript知识库]javascript中的隐式转换

数字和字符串如果使用+运算符进行操作,那么会将数字先转换为字符串,然后进行字符串连接操作

var a = "qweqwe";
var num = 2;
console.log(a + num);
//qweqwe2

如果有布尔型参与,那么首先会将布尔值转换为对应的数字或者字符串,然后再进行相应的字符串连接或者算数运算

var bool = true;
var num = 2;
console.log(bool + num);//3

如果布尔类型与字符串相加,布尔值会和字符串拼接起来

var bool = true;
var str='12345';
console.log(bool + str);//true12345

Null和Undefined参与的+运算符操作
如果和数字进行计算,null会转化为0,undefined会转化成NaN

console.log(undefined + 1); //NaN
console.log(null + 1); //1

Null和Undefined参与的+运算符操作

如果和字符串进行计算

var a;
var sta = "123";
console.log(a + sta); //'undefined123'

var b = null;
var stb = "123";
console.log(b + stb); //'null123'

其他值类型(Number、Boolean、Null、Undefined)进行比较的时候都会将运算数转换为数字

console.log("1" == 1);
console.log(true == "1");//”1”和true转换成数字,然后进行比较
console.log(null == 0);
console.log(undefined == 0);//

????????

?不是说null会转换成0吗,为啥第三个是false

:在关系运算符中,null,undefined会被Number()强制转换成数字类型;
在相等运算符中,null,undefined则不会转化为数字类型,而是经过特殊处理后转化为false(当然,除了与自身对比,或者是null与undefined对比,即都为true)。

?JavaScript提供了isNaN来检测某个值是否为NaN,但是,这也不太精确的,因为,在调用isNaN函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是NaN的值转换成NaN的

isNaN("foo"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN({ valueOf: "foo" }); // true

有一种可靠的并且准确的方法可以检测NaN只有NaN是自己不等自己的,那么,我们就以使用不等于号(!==)来判断一个数是否等于自身,从而,可以检测到NaN了

var a = NaN;
a !== a; // true
var b = "foo";
b !== b; // false
var c = undefined;
c !== c; // false
var d = {};
d !== d; // false
var e = { valueOf: "foo" };
e !== e; // false

对象转换成字符串是调用了他的toSting函数的

象也是可以转换成数字的,它是通过valueOf函数的

一个对象同时存在valueOf方法和toString方法,那么,valueOf方法总是会被优先调用的

但是真正应用的时候并没有这么简单,例如下面两个例子

var obj = {
 webName: "林益泰傻狗",
 url:"www4399com"
}
console.log(obj);
console.log(obj.toString());
var arr = [1, 2, 3];
console.log(arr);
console.log(arr.valueOf());

大多数对象隐式转换为值类型都是首先尝试调用valueOf()方法。但是Date对象是个例外,此对象的valueOf()和toString()方法都经过精心重写,默认是调用toString()方法,比如使用+运算符,如果在其他算数运算环境中,则会转而调用valueOf()方法。

var date = new Date();
console.log(date);
console.log(date + "1");
console.log(date + 1);
console.log(date - 1);
console.log(date * 1);

空数组[]转化为Number,得到0;空对象{}转化为Number,得到NaN?

console.log(Number([])); // 0
console.log(Number({})); //NaN

用if()判断
由于空数组和空对象都是Object类型,因此用if()判断的时候,都为true
和布尔值比较
由于任何值和布尔值比较时,两边都会转化为Number类型

console.log([] ? true : false); //true
console.log([] == false); //true
console.log({} == false); //false

toString()方法返回一个表示该对象的字符串。

每个对象都有一个toString() 方法,当对象被表示为文本值时或者当以期望字符串的方式引用对象时,该方法被自动调用。
对于对象x,toString() 返回 “[object type]”,其中type是对象类型。
如果x不是对象,toString()返回x应有的文本值(不是单纯的加”“)

var x = {}
console.log(x.toString()) //  "[object Object]"
toString.call(undefined) //"[object Undefined]"
toString.call(null) // "[object Null]"

//其他类型的toString():
var x = [1,2,3]
x.toString() // "1,2,3"

var x = function(){console.log('hello world')}
x.toString() // "function(){console.log('hello world')}"

var x = 12345
x.toString() // "12345"


?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:37:53  更:2021-12-11 15:39:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:44:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码