JS中的数据类型,是学习JS的基础,他主要分为两大类分别是:javascript
- 基本数据类型和引用数据类型,基本数据类型又分为number、string、boolean、null、undefined、还有ES6新语法规范中的Symbol,BigInt
- 引用数据类型:对象(普通对象、数组对象、正则对象、Math、Date)、函数
今天咱们主要先简单了解一下各类数据类型:java
按值操做数组
正数、负数、0安全
NaNbash
对于NaN咱们须要了解的内容:函数
- not a number 不是一个有效数字,可是属于number类型的
- NaN和任何值都不相等(包括本身自己)
- NaN == NaN //=>false
Infinity:无穷大的值,也是number类型的学习
由此咱们引伸出isNaN的概念ui
console.log(isNaN(1)); //=>false
console.log(isNaN(NaN)); //=>true
console.log(isNaN(Infinity)); //=>false
console.log(isNaN('AA')); //=>true
console.log(isNaN('12.5')); //=>false
console.log(isNaN('12.5px')); //=>true
console.log(isNaN([])); //=>false
console.log(isNaN([10])); //=>false
console.log(isNaN([10, 20])); //=>true
console.log(isNaN({})); //=>true
console.log(isNaN(null)); //=>false
console.log(isNaN(undefined)); //=>true
console.log(isNaN(Symbol(1))); //=>报错
复制代码
console.log(Number('12')); //=>12
console.log(Number('12.5')); //=>12.5
console.log(Number('12px')); //=>NaN
console.log(Number('12.5.0')); //=>NaN
复制代码
console.log(Number(true)); //=>1
console.log(Number(false)); //=>0
复制代码
console.log(Number(null)); //=>0
console.log(Number(undefined)); //=>NaN
复制代码
console.log(Number(Symbol(13))); //=>Cannot convert a Symbol value to a number
复制代码
let obj={x:100};
console.log(Number(obj)); //=>NaN
复制代码
/* * 1.先把ARR转换为字符串: "10" * 2.在把"10"转换为数字:10 */
let arr = ["10"];
console.log(Number(arr)); //=>10
/* * 1.先把ARR转换为字符串: "10,20" * 2.在把"10,20"转换为数字:NaN */
arr = ["10", "20"];
console.log(Number(arr)); //=>NaN
console.log(Number([])); //=> []->'' Number('')->0
console.log(Number(['AA'])); //=> ['AA']->'AA' Number('AA')->NaN
复制代码
console.log(Number(function func() {}));//=>NaN
复制代码
console.log(Number('12px')); //=>NaN
console.log(parseInt('12px')); //=>12
console.log(parseInt('12px24')); //=>12
console.log(parseInt('width:12px')); //=>NaN
console.log(parseInt('12.5px')); //=>12
console.log(parseFloat('12.5px')); //=>12.5 parseFloat比parseInt多识别一个小数点
console.log(Number(true)); //=>1
console.log(parseInt(true)); //=>先把TRUE转换为字符串"TRUE" parseInt('true') =>NaN
console.log(parseInt(NaN)); //=>NaN
console.log(Number(null)); //=>0
console.log(parseInt(null)); //=> parseInt('null') =>NaN
console.log(isNaN(Number(parseInt("0.8")))); //=>parseInt("0.8")->0 Number(0)->0 isNaN(0)->false
console.log(Number('')); //=>0
console.log(parseInt('')); //=>NaN
复制代码
在Number这一大类中,有不少公用的方法,本次只列举两个较为经常使用的spa
let n = 3.1415926;
console.log(n.toFixed(2)); //=>"3.14"
复制代码
console.log(Number.MAX_SAFE_INTEGER); //=>9007199254740991 最大安全数(JS可以有效识别的最大整数)
console.log(9007199254740992 == 9007199254740993); //=>true 应该是不同的,可是超过了最大数值,JS没法精准计算
ES6中提供了一个新的数据类型 BigInt:管理超过安全数值的数字
console.log(BigInt(9007199254740992), BigInt(9007199254740993));
/* * 基本数据类型 * number string boolean null undefined symbol => BigInt新增的基本数据类型 */
复制代码
console.log(7 % 3); //=>取余 1
复制代码
console.log(3 - "3px"); //=>NaN
console.log(3 + "3px"); //=>"33px" 字符串拼接
console.log(1 + "1"); //=>"11" 字符串拼接
console.log(1 + {}); //=>"1[object Object]" 在把{}转换为数字过程当中,先把他转换为字符串"[object Object]",此时右侧出现了字符串,则再也不是数学运算,而是字符串拼接了
console.log(1 + []); //=>'1'
console.log([10] + true); //=>"10true" 在转换[10]到数字的过程当中,先把其转换为字符串"10",此时操做变为字符串拼接(和数学运算不要紧了)
console.log(true + [10]); //=>"true10"
console.log(1 + true); //=>2
console.log(100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false);
100 + true => 101
101 + 21.2 => 122.2
122.2 + null => 122.2
122.2 + undefined => NaN
NaN + "Tencent" => "NaNTencent" 字符串拼接(之后都是字符串拼接)
"NaNTencent" + [] => "NaNTencent"
"NaNTencent" + null => "NaNTencentnull"
"NaNTencentnull" + 9 => "NaNTencentnull9"
"NaNTencentnull9" + false => "NaNTencentnull9false"
复制代码
// 完成字符串拼接处理:2020年03月03日 12:00:00
let year = '2020';
let month = '03';
let day = '03';
let hours = '12';
let minutes = '00';
let seconds = '00';
复制代码
//从页面中获取一个元素拼接内容
let str='<div class="box" id="box">';
str+='<h2 class="title">哈哈</h2>';
str+='<ul class="item">';
str+='<li></li>';
....
复制代码
${}
反引号:为了解决传统字符串拼接中的问题反引号${}反引号
中存放变量或者其余的JS表达式便可${year}年${mouth}月${day}日${hours}:${minutes}:${seconds}
反引号// ES6中的模板字符串就是为了解决传统字符串拼接中的问题(反引号 TAB上面的撇):${}中存放变量或者其它的JS表达式便可,很简单的完成字符串拼接
let result = `${year}年${month}月${day}日 ${hours}:${minutes}:${seconds}`;
console.log(result);
复制代码
//从页面中获取一个元素拼接内容
let str = `<div class="box" id="box"> <h2 class="title">哈哈</h2> <ul class="item"> ${[10,20,30].map(item=>{ return `<li>${item}</li>`; }).join('')} </ul> </div>`;
console.log(str);
复制代码
console.log(!!1); //=>true
console.log(!1); //=>false
console.log(!!-1); //=>true
console.log(!!0); //=>false
console.log(!!undefined); //=>false
console.log(!!Number('12px')); //=>Number('12px')->NaN false
console.log(!![]); //=>true
console.log(!!''); //=>false
console.log(!!{}); //=>true
复制代码
/* 条件判断中,每个条件最后必定是true/false */
if (1 == 1) {}
if (1) {
//=>写一个值,也是要把这个值转换为布尔,而后校验程序的真假
}
if (3 + '3px') {} //=>3 + '3px' =>'33px' 真
if (3 - '3px') {} //=>3 - '3px' =>NaN 假
复制代码
一、声明了一个变量,可是没有赋值,这个变量就是undefined;3d
var num;
console.log(num)===>undefined
复制代码
二、咱们在获取一个对象的属性名对应的属性值的时候,若是这个属性名在对象中没有,获得的这个值就是undefined
var obj={name:"lili"};
obj.name ====>"lili"
obj.age====>undefined
复制代码
三、若是函数里面有形参,我们在执行函数的时候,并无传参数,那么,在函数体中去打印这个形参,获得值就是undefined;
function fn(n,m){
console.log(n);====>undefined
}
fn()
复制代码
四、正常的一个函数里面return多少,那么这个执行函数最后的返回结果就是多少,若是没写return,(即此函数没有返回值),在执行函数的时候,返回值就是undefined;
function fn2(){
}
var res=fn2() =====>undefined;
复制代码