javascript 隐式转换_mysql隐式转换

javascript 隐式转换_mysql隐式转换JavaScript的隐式转换一、JavaScript数据类型二、JavaScript隐式转换1.隐式转换规则1.+运算符2.==运算符3.>运算符4.复杂数据类型一、JavaScript数据类型js中有7种数据类型,可以分为两类:原始类型、对象类型。简单数据类型(也称为原始类型):Undefined、Null、Boolean、Number、String和Symbol。ES6中新增了一种Symbol。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、 JavaScript 数据类型

js中有7种数据类型,可以分为两类:原始类型、对象类型。

简单数据类型(也称为原始类型):Undefined、Null、Boolean、Number、String 和 Symbol。ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
复杂数据类型叫 Object(对象)。Object 是一种无序名值对的集合。

二、 JavaScript 隐式转换

在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算。
这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换。
在js中,想要将对象转换成原始值,必然会调用toNumber() 和 toPrimitive() 方法,是内部的。
toNumber() 方法,比较好理解,就是转换成 Number 类型,类似 Number() 方法。
该函数形式如下:
toPrimitive(input,preferedType?)
input是输入的值,preferedType是期望转换的类型,他可以是字符串,也可以是数字。

1. 隐式转换规则

  1. 转成string类型: +(字符串连接符)

  2. 转成number类型:++/–(自增自减运算符) + – * / %(算术运算符) > < >= <= == != === !== (关系运算符)

  3. 转成boolean类型:!(逻辑非运算符)

涉及隐式转换最多的两个运算符 + 和 ==。

2. + 运算符

+运算符即可数字相加,也可以字符串相加。所以转换时很麻烦,有些也比较难理解:
1.字符串连接符+:会把其他数据类型调用String()方法转成字符串然后拼接
2.算术运算符+:会把其他数据类型调用Number()方法转成数字然后做加法计算

//+是字符串连接符:
//String(1)+'true'='1true'
console.log( 1 + "true")://"1true"
//+是算术运算符:
//1 + Number(true)=1+1=2
console.log ( 1 + true);//2
//1+ Number(undefined)=1+NaN=NaN
console.log( 1 + undefined);// NaN
//1+Number(null)=1+0=1
console.log( 1 + null);//1

3. == 运算符

1.对象和布尔值比较

对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

[] == true;  //false

[]转换为字符串’’,然后转换为数字0,true转换为数字1,所以为false

2.对象和字符串比较

对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。

[1,2,3] == '1,2,3' // true 

[1,2,3]转化为’1,2,3’,然后和’1,2,3’, so结果为true;

3.对象和数字比较

对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。

[1] == 1;  // true 

对象先转换为字符串再转换为数字,二者再比较 [1] => ‘1’ => 1 所以结果为true

4.字符串和数字比较

字符串和数字进行比较时,字符串转换成数字,二者再比较。

'1' == 1 // true

5.字符串和布尔值比较

字符串和布尔值进行比较时,二者全部转换成数值再比较。

'1' == true; // true 

6.布尔值和数字比较

布尔值和数字进行比较时,布尔转换为数字,二者比较。

true == 1 // true

其实规律很简单,大家可以记下边这个图
数据转换
在这里插入图片描述

如图,任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 布尔值 => 数值。

[] == false;
![] == false;

这两个的结果都是true,第一个是,对象 => 字符串 => 数值0 false转换为数字0,这个是true应该没问题,
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(’’),NaN,0,null,undefined这几个外返回的都是true, 所以! []这个[] => true 取反为false,所以![] == false为true。

4. >运算符

  1. 当关系运算符两边有一边是字符串的时候,会将其他数据类型使用Number()转换,然后比较关系↓

    console.log("2">10 );//false Number(2)>10=2 >10=false
    
  2. 当关系运算符两边都是字符串的时候,此时同时转成number然后比较关系。此时并不是按照Number()的形式转成数字,而是按照字符串对应的unicode编码来转成数字。使用这个方法可以查看字符的unicode编码:字符串.charCodeAt(字符下标,默认为0).

    console.log("2">"10");//true
    //'2'.charCodeAt()>'10'charCodeAt()=50>49=true
    console.log("2".charCodeAt())://数字50
    console log("10".charCodeAt())://数字49(默认返回第一个字符的编码,如果想要查自第二个字符可以传参下标)
    

    多个字符从左往右依次比较↓

    console.log( "abc" > "b" );//false
    先比较'a''b','a''b'不等,则直接得出结果
    console log ( "abc" > "aad")//true
    先比较'a''a',两者相等,继续比较第二个字符
    'b''a' ,得出结果,
    console.log("a".charCodeAt())://数字97
    console.log("b".charCodeAt())://数字98
    
  3. 特殊情况(无视规则):
    如果数据类型是 undefined与null,,得出固定的结果

console.log( undefined == undefined);//true
console.log( undefined == null);//true
console.log( null == null);//true
console.log( NaN == NaN );//false
console.log( Number('as') == NaN );//false

Null类型的比较不等于1或0(实际上,null仅与undefined 相当),但当强制转换ToNumber(null)===0;(但一定要注意区分null和0)
NaN与任何数据比较都是NaN ,Number(‘as’) 输出 NaN 。NaN == NaN 为什么是 false。其实 js 规定的NaN 不等于NaN。

5. 复杂数据类型

在隐式转换时会先转成String,然后再转成Number运算

{ 
   }+[]//0
[]+{ 
   }//"[object Object]"
0+{ 
   }//"0[object Object]"
{ 
   }+0//0

是因为{}可以是空块或空对象文字,具体取决于上下文。

可以是一元加运算符,也可以是连接运算符,具体取决于上下文。
第一个代码示例是一个空块,它可能也不存在,使表达式相同+[],意思是“空数组转换为数字”。

你不能把一个块作为一个函数参数,所以第二个代码示例{}是一个对象,代码的意思是“用一个数组来传递一个对象”(隐式地将对象和数组转换为字符串)。换句话说,{} + []表达式是一个empty代码块,后面跟array一个数字(Number[])的约束。

在第二个示例中,您只是向concat数组提供了一个对象文字(空对象)。这就是你收到的原因[object Object]。

实例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object] (注意第一个小写o,第二个大写O)
在这里插入图片描述
在这里插入图片描述
== 等号两边都为对象时,比较的是地址

[]==[]//false
{ 
   }=={ 
   }//false
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183500.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 点积与叉积[通俗易懂]

    点积与叉积[通俗易懂]1. 向量的点乘:向量点乘是其各个分量乘积的和几何意义:点乘的结果是一个标量,等于向量大小与夹角的cos值的乘积。                    a•b=|a||b|cosθ                如果a和b都是单位向量,那么点乘的结果就是其夹角的cos值。                    a•b=cosθ交换律:分配律:结合律:  其中m是实数。2.向量叉乘:两个…

    2025年7月26日
    0
  • 金蝶盘点机条码数据採集器PDA,WIFI已经连接,可是PDA应用程序还是网络初始化不成功?「建议收藏」

    金蝶盘点机条码数据採集器PDA,WIFI已经连接,可是PDA应用程序还是网络初始化不成功?

    2022年1月24日
    50
  • JavaScript-匿名函数[通俗易懂]

    JavaScript-匿名函数[通俗易懂]什么是匿名函数1、匿名函数,即没有名称的函数2、如果单独只写一个匿名函数,此时是不符合语法要求的会报错。需要给匿名函数包裹一个括号,使之成为表达式。3、被小括号包裹的内容会被js识别为一个函数表达式如何执行和使用匿名函数?需要执行匿名函数后面追加括号即可也就是立即执行函数方式一:小括号只将匿名函数包裹起来后面跟随执行的小括号(常用)(function(){alert(‘匿名函数执行方式一’)})();小括号将匿名函数以及执行匿名函数的小括号都包裹起来

    2022年10月3日
    0
  • c中构造函数的作用_python中构造方法的作用

    c中构造函数的作用_python中构造方法的作用C#中构造函数的作用共同点:都是实例化对象,初始化数据的默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有,它的作用和空参的一样,只是它里面可以有参数,给你个例子来说明吧有一个类Monitor它有属性Stringheight;StringwidthpublicMonitor(){}publ

    2022年9月7日
    1
  • mysql 函数 截取_mysql函数之截取字符串

    mysql 函数 截取_mysql函数之截取字符串文章摘取自http://www.cnblogs.com/zdz8207/p/3765073.html练习截取字符串函数(五个)mysql索引从1开始一、mysql截取字符串函数1、left(str,length)从左边截取length2、right(str,length)从右边截取length3、substring(str,index)当index>0从左边开始截取直到结束当index…

    2022年6月12日
    25
  • Jmeter 之正则表达式提取器应用「建议收藏」

    Jmeter 之正则表达式提取器应用「建议收藏」目录前言一、获取单个数据二、获取多个数据个人觉得非常非常细节的地方注意一下:前言说到Jmeter正则表达式提取器的应用,就不得不说到关联。所谓关联,就是把应用中动态变化返回的数据获取到,把它保存为一个参数,提供给后面需要用到的地方进行使用。Jmeter中关联可以通过“添加—后置处理器—正则表达式提取器”来获取数据,且注意正则表达式提取器附在需要获取数据的某个采样器之下,数据一般从“查看结果树“的响应数据获取。Jmeter中关联可以通过“添加—后置处理器—正则表达式提.

    2022年9月10日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号