数据类型
var num = 123; number:所有的数字集合,所有的数字(不带上引号的);
var str = '123'; string:所有的被引号(单引号或双引号)都是属于字符串;
var bool = true; boolean:true or false;
var null = null; null: null代码的是一个空值;是一种独立的数字类型;
var obj = []; object:对象;
var und = undefined; undefined:未定义;
undefined 与null值的区别在于:
1.undefined未初始化值/默认值;
2.数据类型不同;
3.两种类型都不相同,undefined类型的值为undefined , null类型的值还是null;
在JS里面,除了复杂型的数据类型object以外,其它的五种都是属于基本的数据类型;
比如说数组,比如说json{}对象、function.都是属于复杂的数据类型;
数据类型的转换
一、Number()
//在不同类型中,值进行不同的类型转换;
//如何把字符串转变为数字;
//我们只需要使用Number的内建函数/原生的构造函数;由JS的底层提供的。
var str = '123';
console.log( typeof str ); //string
var num = Number( str );
console.log( num ); //123 string
console.log( typeof num ); //number
//如果数字类型为字符串,里面不是数字;
var str = 'ABC';
var num = Number( str );
console.log( num ); //非字符类型;会弹出NaN;
//NaN Not a number 不是一个数字(坏数值);
console.log( typeof num ); //number
//在写代码的时候,如果有一个数值变为NaN,一定是进行了非法的数学运算。
//比如(进行了非法的数学运算,或强制地转换为数字类型),这样就会出现问题,就会出来NaN。
console.log( 1/'a' );
负号可以被转换
var str = '-100';
var num = Number( str );
console.log( num); // -100 可以被转; 数字里面存在着负号;
''空字符串可以转换
var str = '';
var num = Number( str );
console.log( num ); //输出0 ''字符串可以被Number转为0;
null 可以被转化为0;
undefine 会被Number转化为NaN;
true 可以被转化为1;
false 可以被转化为0;
[] 0
[]如果有多条数据的话,变为NaN.
{} NaN
二、转字符串 String/toString
var a = 1;
var str = String(a);// ' 1 '
console.log( typeof str ); //string
var a = NaN;
var str = String(a);
console.log( str );// ' NaN '
console.log( typeof str );//string
var a = true;
var str = String(a);
console.log( str ); // 'true '
console.log( typeof str );//string
var a = [];
var str = String(a);
console.log( str ); // '' 可以,但是转的时候会变成一个空的字符串;
console.log( typeof str );//string
var a = [123,'abc'];
var str = String( a );
console.log( str ); //123,ABC
console.log( typeof str ); //string
var a = null;
var str = String( a );
console.log(str) // 'null'
console.log( typeof str ); //string
var a = undefined;
var str = String( a );
console.log(str) // 'undefined'
console.log( typeof str ); //string
var a = function(){};
var str = String( a );
console.log(str) // 'function(){}'
console.log( typeof str ); //string
三、转布尔值 ( boolean )
转化为布尔值;
var a = 1; // 六个转为false 的值 :0 、''、undefined 、null 、NaN 、false .
var b = Boolean(a); //true
console.log( b );
var a = 'false';
var b = Boolean( a );
console.log( b );//true
var a = 1/'a';
var b = Boolean( a );
console.log( a ); //表达式进行运算; NaN ;
console.log( b );//false
//表达式要进行到最简结果才拿过来运算;如果属于六个中的一个,就属于false;
四、parseInt 取整
取整数,把小数部分去掉
//从左往右依次地检查,一旦发现非数字就停止了。
var a = '5.20'; //取整的时候不会去认小数点的,一但发现非数字,取值就停止了。
var b = parseInt( a );
console.log( b );// 5
//如果说是非数字的话;
var a = '100px'; 发现非数字px,取值就停止了。
var b = parseInt( a );
console.log( b ); // 100
var c = parseInt( 'abc' ); //输出NaN,因为Number会把这些东西全都转换为数字;
console.log( c );//如果里面有非数字,所以转不了。所以是NaN;
//比如:传入一个字符串,会从字符串的左边开始往右找(会忽略开始的空格字符),直到遇到非数字(除了- + 号)停止。
var a = parseInt( '.100px' ); -> 不能转;
var a = parseInt( ' 100px' ); -> 会忽略开始的空格字符 。
var a = parseInt( true ); -> 不能
var a = []; -> 不能转
五、parseFloat
用来取一个浮点数的(能取到小数部分)
只认第一个小数点,这时候第二个小点数后面的内容都会被舍弃。
var a = 1.2.34 ;
var b = parseFloat( a );
console.log( b ); //1.2
var a = '';//空字符串会被转为NaN;
var a = [];//会被转为NaN,因为他会调用toString,返回空字符串;
var a = ['1'];//如果是['1'] ,同样是可以转的,最终传的是'1',
var b = parseFloat(a);
console.log( b );//1
六、运算符
算术运算符: + - * / %
var a = 1
var b = a + '2'; //'12' 加号左右有字符串会进行拼接
var c = a * '13'; //13 除了加号 都会强制类型转换 1 * 13 = 13
赋值运算符: =
var x = 1 ;//创建了一个空间名为 x 它的值为 1
x = 2; //重新赋值 比如汽车一个轮胎为2斤气感觉不够 重新加气加到2.5斤
比较运算符:> < >= <= != !==
比较运算符返回 true false 多数用于判断
var x = 1;
if( x < 2){console.log('x确实小于2')
逻辑运算符 : && || !
逻辑运算符(且、或、非):
&的优先级高于||
逻辑且(并且) (&&) :
&&遇到true就通过,false则停止
var a = 0 &&2 ; //boolean 0 ->false, 返回零;
var b = 1 &&2 ; //boolean 1 ->true, 返回2;
console.log( a );
console.log( b );
//&&遇到true就通过-->也就是两边会进行boolean值的转换,如果两边都是true的时候就通过。
var a = null && 2 ; //boolean null -> false , 返回 null .
var a = {} && 2 && "" && '123' ; //boolean()
//console.log( a ); -> '' 值在哪个地方停的就取谁。
逻辑或 (||):
|| 逻辑或 :false通过,遇到true就停止。
//||两边会转为布尔值,如果转为布尔值以后是false.就通过;
var a = 0 || 2; //0
console.log( a ); //
var b = '123'&&123||!""||true&&undefined||1; //123 , undefined
var c = 123||!""||undefined||1;
console.log( b )
取反(非) (!)
六个转为false 的值 :0 、''、undefined 、null 、NaN 、false .
只有两种状态才可以取反,只有正反对应两种状态。
//在JS中,只是两种类型才只有一种状态,布尔值;
//true的相对值为false ;
var a = true ;
//console.log( !a ); ->false
var a = 1 ;
// console.log( !a ); ->false -> 强制隐式类型的转换;
//console.log( !!a ); ->true 不会影响到a的变量,只是在当前的运用环境中运用强制变换,本身的值是不会发生改变的。
括号运算符:提升优先级的时候;
var a = 1 * 3 + 4
console.log(a)//7 不加括号
var a = 1 * (3+4) //优先计算括号
console.log(a)//12
% 取余
在进行除法运算中会产生余数,也就是说取余是取余数部分(5/2 = 2%1)。
var a = 12
console.log(a % 4 ) //0
++和 - -
//隐性类型转换;
var a = '1';
a++;
console.log( a );
// 但是 ++ 可以拆分为 a = a + 1 ; 但是有一边为字符串的时候会是拼接。
/*
如果有一边是字符串的时候,++会进行隐式的强制类型的转换,调用的还是Number()的方法;
减号的时候,本来就是会进行隐式类型的转换的。
*/