JavaScript数据类型

JavaScript数据类型

JavaScript的基本数据类型有数值型Number、字符串型String、布尔型Boolean以及两个特殊的数据类型undefined和null。
不可改变的 原始值栈数据
引用值堆数据
Number
array
String
object
Boolean
function
undefined
/
null
/
        var arr1 = [1, 2];
        var arr2 = arr1;
        console.log(arr2);    //打印结果: [1, 2]
        arr1.push(3);
        console.log(arr2);    //打印结果: [1, 2, 3]
        arr1 = [1,3];
        console.log(arr2);    //打印结果: [1, 2, 3]

 


数值型(number)是JavaScript中最基本的数据类型。JavaScript并不区分整形数值和浮点型数值,所有的数值都是由浮点型表示的。
浮点型数据(可以具有小数点)
(1)传统计数法
         3.14    56.33
(2)科学计数法
         3.12e11(3.12E11),就是3.12乘10的11次方。
特殊值infinity表示无穷大,-infinity表示无穷小。 (1/0结果为infinity,-1/0结果为-infinity)
特殊值NaN(Not a Number)表示非数字。 (0/0,结果为 NaN

字符串型(string)是JavaScript用来表示文本的数据类型。
在 JavaScript 中,字符串写在单引号或双引号中。
 反斜杠是一个 转义字符 。 转义字符将特殊字符转换为字符串字符:
转义字符 (\) 可以用于转义撇号,换行,引号,等其他特殊字符。
下表中列举了在字符串中可以使用转义字符转义的特殊字符:
转义字符“ \n”在 alert();语句中会产生换行,但是在 document.write();语句中使用转义字符时,只有将其放在格式化文本块中才会起作用,所以脚本必须放在 <pre>...</pre>的标记内。
        document.write("<pre>");
        document.write("轻松学习\nJavaScript语言");
        document.write("</pre>");


布尔型(boolean)
布尔数据类型只有两个值;一个是true(真),一个是false(假)。

特殊数据类型(undefined和null)
(1)未定义值undefined,表示变量还没有赋值。
(2)关键字null,表示空值,用于定义空的或不存在的引用。
null与undefined的区别是 :null表示一个变量被赋予一个空值,而undefined则表示该变量尚未被赋值。
 

 
不同类型数据使用 typeof 运算符的返回值
typeof 能返回的六种数据类型(区分数字类型)number、string、boolean、undefined、object、function
数据类型
返回值
数值
number
字符串
string
布尔值
boolean
undefined
undefined
null
object
对象
object
函数
fuction
 
写成 console.log(typeof num); 也可以,不过最好加括号
var num = 123; console.log(typeof (num));    //返回 number
var num = {}; console.log(typeof (num));    //泛泛的引入值都返回 object
var num = []; console.log(typeof (num));    //泛泛的引入值都返回 object
var num = null; console.log(typeof (num));     //答案返回 object
var num = undefined; console.log(typeof (num));    //答案返回 undefined
var num = function () { }; console.log(typeof (num));    //答案返回 function

 


数据类型的转换规则

一、显示类型转换
 
(1)其他数据类型转换为数值型(Number)数据
类型
转换为数值型数据的结果
undefined
NaN
null
0
逻辑型
若其值为 true,则结果为 1;若其值为 false,则结果为 0
字符串型
若内容为数字,则结果为相应的数字,否则为 NaN
其他对象
NaN
var num = Number("123"); 
console.log(typeof(num) + ":" + num);    //number:123,把字符串类型的 123 转换成了 number 类型

var demo = "123";
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:123,上面那一行的 Number 是为了把()里面转换成数字类型

var demo = true;
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:1

var demo = false;
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:0

var demo = null;
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:0

var demo = undefined;
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:NaN

var demo = "abc";
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:NaN

var demo = -123;
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:-123

var demo = "123abc";
var num = Number(demo);
console.log(typeof (num) + ":" + num);    //答案显示 number:NaN

 


(2)其他数据类型转换为逻辑型(Boolean)数据
类型
转换为逻辑型数据的结果
undefined
false
null
false
逻辑型
若其值为 0 或 NaN,则结果为 false,否则为 true
字符串型
若其长度为 0 ,则结果为 false,否则为 true
其他对象
true
var demo = "";
var num = Boolean(demo);
console.log(typeof (num) + ":" + num);    //答案显示 boolean:false

var demo = null;
var num = Boolean(demo);
console.log(typeof (num) + ":" + num);    //答案显示 boolean:false

var demo = "abc";
var num = Boolean(demo);
console.log(typeof (num) + ":" + num);    //答案显示 boolean:true

提示:(被认定为 false 的值)转换为布尔值结果为 false 的值有 undefinednullNaN, ""(空串),0false

 

(3)其他数据类型转换为字符串型(String)数据
类型
转换为字符串型数据的结果
undefined
undefined
null
null
逻辑型
NaN、0 或者与数值相对应的字符串
字符串型
若其值为 true,则结果为 true;若其值为 false,则结果为 false
其他对象
若存在,则其结果为 toString() 方法的值,否则其结果为 undefined
提示:String()转换成字符串,写什么都成了字符串
var demo = 123.234;
var num = String(demo);
console.log(typeof (num) + ":" + num);    //答案显示 string: 123.234

var demo = undefined;
var num = String(demo);
console.log(typeof (num) + ":" + num);    //答案显示 string: undefined

想把谁转换成字符串,就写成谁.toString(undefined null 不能用 toString

var demo = 123;
var num = demo.toString();
console.log(typeof (num) + ":" + num);    //答案显示 string: 123。相当于把 123 转换字符串。

var demo = 123;
var num = demo.toString(8);
console.log(typeof (num) + ":" + num);    //答案 173,把 123 转成为八进制

var demo = 20;
var num = demo.toString(8);
console.log(typeof (num) + ":" + num);    //答案 24。以十进制为基底,把 20 转换成 8 进制,就是 24

 


二、隐式类型转换
隐式类型转换是跟你转换了也不知道,隐式类型转换内部隐式调用的是显示的方法 。
隐式类型转换包括 isNaN ()   , ++ -- ,  +/- (一元正负), + * %   && ||   , < > <= >= == !=
var a = "123"; a++;
console.log(a);    //答案 124,++这个符号放到这里,还没运算之前,先把前面的 a 转换成number 的 123

var a = "abc"; a++; console.log(a);    //答案 NaN

var a = +"abc";
console.log(a + ":" + typeof (a));    //答案 NaN:number。尽管转换不成数字,也会转换成数字类型,因为里面隐式的调用了一个 number

var a = 1 * "1";
console.log(typeof (a) + ":" + a);    //答案 number:1

var a = "a" * 1;
console.log(typeof (a) + ":" + a);    //答案 number:NaN, 先是 number(“a”)的结果乘以 number(1)的结果,最后是 NaN*1, 还是NaN,但是数据类型是 number
var num = 1 + "1"; console.log(num);    //显示 11
var num = 1 * "1"; console.log(typeof (num) + ":" + num);    //显示 number:1
var num = 1 - "1"; console.log(typeof (num) + ":" + num);    //显示 number:0
var num = "2" - "1"; console.log(typeof (num) + ":" + num);    //显示 number:1
var num = "2" * "3"; console.log(typeof (num) + ":" + num);    //显示 number:6

 

var a = 1 + "1";
console.log(typeof (a) + ":" + a);    //答案 string:11
//+隐式类型会转换成 string,当加号两侧有一个是字符串,就用调用 string,把两个都变成字符串

 

var a = 1 > "2";
console.log(typeof (a) + ":" + a);    //答案 boolean:false , 有数字相比较的,就会隐士类型转换成数字类型

var a = "3" > 2;
console.log(typeof (a) + ":" + a);    //答案 boolean:true , 会转换成数字,因为数字优先

var a = "3" > "2";
console.log(typeof (a) + ":" + a);    //答案 boolean:true , 这个没类型转换,这个比的是ASCⅡ

var a = "1" == 1;
console.log(typeof (a) + ":" + a);    //答案 boolean:true , 也有隐士类型转换

var a = 1 == true;
console.log(typeof (a) + ":" + a);    //答案 boolean:true

 

在控制台操作
        false > true    //答案 false,会先转换成数字,0>1 当然是错的例
        2>1>3    //答案 false
        2 > 3 < 1    //答案 true
        10 > 100 > 0    //答案 false
        100 > 10 > 0    //答案 true
        3 > 2 > 1    //答案 false
        // 以上都是挨个算的,先看前面的是 true 还是 false,再和后面的比,不是顺着下来
        undefined > 0    //答案 false
        undefined == 0    //答案 false
        undefined < 0    //答案 false
        null > 0    //答案 false
        null == 0    //答案 false
        null < 0    //答案 false
        undefined == null    //答案 true
        NaN == NaN    //答案 false,NaN 是唯一一个连自己都不等于自己的

 

 
三、不发生类型转换
        1 === 1    //答案 true
        1 === "1"    //答案 false
        1 !== "1"    //答案 true
        1 !== 1    //答案 false
        NaN = NaN    //答案 false 特殊的

提示: console.log(a);  如果变量没定义就直接访问,就 a is not defined 报错; 有一种特殊情况,当且仅当把未定义的变量放到 console.log(typeof(a)); 里面就访问, 不报错,返回 undefined。

 
console.log(typeof (a));    //答案 undefined,这个 undefined 是字符串
console.log(typeof (typeof (a)));    //答案 string

console.log(typeof(typeof(a))); 可以先解析成 console.log(typeof("undefined")); 再返回一次就是 string 字符串

 
实例练习
console.log(typeof (a));    //返回 undefined
console.log(typeof (undefined));    //返回 undefined
console.log(typeof (NaN));    //返回 number
console.log(typeof (null));    //返回 object

var a = "123abc";    //返回 string
console.log(typeof (+a));    //返回 number
console.log(typeof (!!a));    //返回 boolean
console.log(typeof (a + ""));    //返回 string

console.log(1 == "1");    //显示 true
console.log(NaN == NaN);    //显示 false
console.log(NaN == undefined);    //显示 false
console.log("11" + 11);    //显示 1111
console.log(1 === "1");    //显示 false
console.log(parseInt("123abc"));    //显示 123 【parseInt 是截断数字】
console.log(typeof (typeof (a)));    //返回 string

var num = 123123.345789; console.log(num.toFixed(3));    //答案 123123.346【toFixed(3)是保留三位小数的意思,四舍五入】

 

 
 
 
 
 
 
 
 
 
 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值