资讯专栏INFORMATION COLUMN

js基础笔记-类型装换

Cobub / 1888人阅读

摘要:在中,如果函数没有声明返回值,那么会返回。返回是一元运算符,后跟变量的名称,用于获取变量的数据类型,其返回值有个以及。

前言

说好听是说JS灵活, 说不好听就是JS的坑太多, JS类型转换就是一个大坑, JS的类型包括了原始类型的[null, undefined, String ,Number, Boolean],以及对象类型的[function, object];

JavaScript 是一种弱类型(或称动态类型)语言,即变量的类型是不确定的。

x = 5; // 5
x = x + "A"; // "5A"

上面代码中,变量x起先是一个数值,后来是一个字符串,类型完全由当前的值决定,这就叫弱类型。

JS的数据类型

JavaScript中有五种原始数据类型:Undefined、Null、Boolean、Number以及String。

Undefined数据类型的值只有一个:undefined。
在JavaScript中,如果函数没有声明返回值,那么会返回undefined。
如果typeof后面跟一个未定义的参数,也是返回undefined。

function undefinedA(){}
undefinedA();//返回undefined
typeof abc;//变量abc未声明,返回undefined

Null数据类型的值只有一个:null。
null与undefined的关系:undefined实际上是从null派生出来的。其实所有的js的object对象的父对象都是null。

undefined == null;//返回true

typeof是一元运算符,后跟变量的名称,用于获取变量的数据类型,其返回值有5个:undefined、boolean、number、string以及object。

转换规则

转 boolean 规则:
null, undefined, "", 0, -0, NaN 转换成布尔值是 false, 剩下的全转化 true;

转 number 规则:

string "2.3.1" => NaN;
非数字形式的,如str,str2.3,2.3.3.3,a+3.2都将会转换成非数字及NaN

Number("str");//NaN
Number("2.3.3.3");//NaN
Number("a+1.2");//NaN
Number("2.3");//2.3

null, "", false, [] => 0;
null,空字符串,FALSE,空数组,都将会转换成数字0(这个可能在隐式类型转换中看到的比较多)

Number(null);//0
Number("");//0
Number(false);//0
Number([]);//0

undefined => NaN;
undefined即未定义,转换为非数字

Number(undefined);//NaN

object => x Number(object.toString())
如果无法从valueOf()方法中获取Primitive值,那么调用object的toString()方法;如果toString()返回的是Primitive值,则将该Primitive值转换成number后返回。(Primitive这个暂时没懂)

Number([2]);//2
Number([2,3]);//NaN
Number({});//NaN

隐式类型转换 ==

有布尔值则转换为数值

1 == true;//true
0 == false;//true

字符串数值,则字符串转换为数值

"2" == 2;//true

根据上面两条,可以想到一个很有趣的转换,如下

!!"2" == true;//true,bool值全转为数字,字符串转数字,数字前加非规则为,非0的都转1

只有一个是对象,则对象会调用toString() valueOf()

"[object Object]" == {id:1};//true,这里的对象进行调用了toString()方法
"[object Function]" == {id:1};//false

null == undefined

null == undefined;//true

NaN != NaN

NaN != NaN

对象==,比较内存地址

var a = {id:1};
var b = {id:1};
a == b;//false,对象比较的内存地址

转换函数

强制转换:parseInt,parseFloat,Number,String,Boolean

下面的例子如下,以Number为例

Number(false);//0 
Number(true);//   1 
Number(undefined);//   NaN 
Number(null);//   0 
Number( "5.5 ");//   5.5 
Number( "56 ");//   56 
Number( "5.6.7 ");//   NaN 
Number(new   Object());//   NaN 
Number(100);//   100  

隐式类型转换:==,-,+,*,if,>=,<=,while,for in,alert

隐式类型转换在比较以及判断,还有做算术运算的时候比较常见

比较运算

"2" == 2;//true;
"2" > 0;//true;

while,for in, alert运算

alert(new Boolean(false));//false,转成字符串

算术运算

"2"+1;//"21"
1+true;//2
"2"+true;//"2true"
"2"-1;//1
"210"-"10";//100
"2"*"3";//6

参考

下表作为参考, 来自js权威指南:

原始类型和对象类型 转换成String 转换成Number 转换成Boolean 转换成Object
undefined "undefined" NaN false throws TypeError
null "null" 0 false throws TypeError
true "true" 1 new Boolean(true)
false "false" 0 new Boolean(false)
""(empty string) 0 false new String("");Object("")
"1.2" (nonempty, numeric) 1.2 true new String("1.2");Object("1.2")
"one" (nonempty, non-numeric) NaN true new String("one");Object("one")
0 "0" false new Number(0);Object(0)
-0 "0" false new Number(-0);Object(-0)
NaN "undefined" false new Number(NaN);Object(NaN)
Infinity "Infinity" true new Number(Infinity);Object(Infinity)
-Infinity "-Infinity" true new Number(-Infinity);Object(-Infinity)
1 (finite, non-zero) "1" true new Number(1);Object(1)
{} (any object) NaN true
[] (empty array) "" 0 true
[9] (1 numeric elt) "9" 9 true
["a"] (any other array) use join() method NaN true
function(){} (any function) "undefined" NaN true

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

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

相关文章

  • JavaScript数据类型中易被忽略的点

    摘要:只比较值得结果,,装换为数值后就是,但是当他们是数组中的一项,或字符串时并非是空的。再看一个比较奇怪的例子首先,看右边,逻辑非对进行布尔转换,依据上面的装换表,数组其实也是对象,装换为真。 String 字符串中可以包含由反斜杠和字符构成的特殊字符,如 换行, 退格,f 换页, 回车, Tab; var multiLine = first second thir...

    widuu 评论0 收藏0
  • Js apply()使用详解

    摘要:方法详解我在一开始看到的函数和时非常的模糊看也看不懂最近在网上看到一些文章对方法和的一些示例总算是看的有点眉目了在这里我做如下笔记希望和大家分享如有什么不对的或者说法不明确的地方希望读者多多提一些意见以便共同提高主要我是要解决一下几个问题和 Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply...

    iOS122 评论0 收藏0
  • 整理下《前端江湖面试》对自己有益的题目。

    摘要:面试题目汇总前言近期在找工作,也在读前端面试江湖这本书,书中整理了很多基础的面试题目,在书中也发现了一些错误。好记性不如烂笔头,于是整理下对自己有益的题目,都是一些较为基础的题目后期还会更新。,返回一个数组,成员为匹配的字符串。 面试题目汇总 前言 近期在找工作,也在读 前端面试江湖 这本书,书中整理了很多基础的面试题目,在书中也发现了一些错误。好记性不如烂笔头,于是整理下对自己有益的...

    hikui 评论0 收藏0
  • 整理下《前端江湖面试》对自己有益的题目。

    摘要:面试题目汇总前言近期在找工作,也在读前端面试江湖这本书,书中整理了很多基础的面试题目,在书中也发现了一些错误。好记性不如烂笔头,于是整理下对自己有益的题目,都是一些较为基础的题目后期还会更新。,返回一个数组,成员为匹配的字符串。 面试题目汇总 前言 近期在找工作,也在读 前端面试江湖 这本书,书中整理了很多基础的面试题目,在书中也发现了一些错误。好记性不如烂笔头,于是整理下对自己有益的...

    QLQ 评论0 收藏0
  • 整理下《前端江湖面试》对自己有益的题目。

    摘要:面试题目汇总前言近期在找工作,也在读前端面试江湖这本书,书中整理了很多基础的面试题目,在书中也发现了一些错误。好记性不如烂笔头,于是整理下对自己有益的题目,都是一些较为基础的题目后期还会更新。,返回一个数组,成员为匹配的字符串。 面试题目汇总 前言 近期在找工作,也在读 前端面试江湖 这本书,书中整理了很多基础的面试题目,在书中也发现了一些错误。好记性不如烂笔头,于是整理下对自己有益的...

    Terry_Tai 评论0 收藏0

发表评论

0条评论

Cobub

|高级讲师

TA的文章

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