JavaScript之数据类型转换,逻辑运算符,typeof

值类型

不可改变的原始值(栈数据)
Number,String,Boolean,undefined,null
引用值(对数据)
array,object,function,

例子:
var arr = [1,2,3]; 
var arr1 = arr;
arr.push(4);
console.log(arr1);
//因为是引用值类型所以arr和arr1中在栈内存存的是相同的地址所以当一个更改时另一个也会更改

typeof(六种数据类型)

number string boolean undefined object function (返回值都是字符串)
特殊object:null 对象 array[]
其他知识点:
typeof()对于为定义的变量是不对报错的

console.log(a);//报错
console.log(typeof(a));//返回undefined
例子
console.log(typeof(123));//number 类型

显示类型转换

(1) Number(mix)
(2) parseInt(string , radix)
(3) parseFloat(string)
(4) toFixed(radix)
(5) String(mix)
(6) Boolean()
(7) toString(radix)


下面详细介绍
1) Number()可以强制将内容转换为number类型;
当强制转换不能转换为number类型时为NaN;
值得注意的是null类型再被强制转换时为0

 console.log(Number('123')); //123
 console.log(Number('abc'));//NAN   NaN -->not a number 是number中的一种
 console.log(Number(null)); //返回0
 console.log(Number(undefined));//返回NaN

那么这道题是什么呢?

console.log(typeof(Number('abc')));

答案为:number 因为Number(’abc’)->为NaN是number类型
2) parseInt(string , radix)
把值转换为整型(不进行四舍五入,直接切掉)
从数字位开始往下找,到非数字位剪切掉。
下面看一下例子:

var demo = parseInt("123");
console.log("demo:"+demo); //123
var demo1 = parseInt(true);
console.log("demo1:"+demo1);//NaN
var demo2 = parseInt("123abc");
console.log("demo2:"+demo2);//123

parseInt()函数在转换字符串时,会忽略字符串前面的空格,知道找到第一个非空格字符。
如果第一个字符不是数字或者负号,parseInt() 就会返回NaN,同样的,用parseInt() 转换空字符串也会返回NaN。
如果第一个字符是数字字符,parseInt() 会继续解析第二个字符,直到解析完所有后续字符串或者遇到了一个非数字字符。
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。(基于第二个参数的进制转换为10进制)
由parseInt()方法的第二个参数指定的,所以要解析十六进制的值,当然,对二进制、八进制,甚至十进制(默认模式),都可以这样调用parseInt()方法。

var num1 = parseInt("AF",16);         //175
var num2 = parseInt("AF");         //NaN
var num3 = parseInt("10",2);       //2  (按照二进制解析)
var num4 = parseInt("sdasdad");       //NaN

3) parseFloat()
与parseInt() 函数类似,parseFloat() 也是从第一个字符(位置0)开始解析每一个字符。也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
也就是说,字符串中第一个小数点是有效的,而第二个小数点就是无效的了,它后面的字符串将被忽略。
parseFloat() 只解析十进制,因此它没有第二个参数指定基数的用法
如果字符串中包含的是一个可解析为正数的数(没有小数点,或者小数点后都是零),parseFloat() 会返回整数。

var num1 = parseFloat("123AF");           //123
var num2 = parseFloat("0xA");            //0
var num3 = parseFloat("22.5");            //22.5
var num4 = parseFloat("22.3.56");         //22.3
var num5 = parseFloat("0908.5");          //908.5

4) toFixed(radix)
可以保留小数点后radix位小数

 var num = 123.333;
 console.log(num.toFixed(1));//123.3

5) String(mix)
写什么东西都转换为字符串。
6) Boolean()
undefined null NaN “” 0 flase ==> 转换为bool值为false ;其余为true。
(7) toString(radix)
以十进制为基底转换为目标进制。

注意:undefined null 不能使用toString。

隐式类型转化,逻辑运算符与或非

(1) isNaN

(2) ++/– +/-

(3) +

(4) * /%

(5) && || !

(6) < > <= >=

(7) == !=
以上前五个要调用显式类型里面的Number();
(6)(7)要调用显式类型的Boolean()。

&&:如果是两个以上的表达式运算先看第一表达式转换成布尔值,如果结果为真,那么看第二个表达式转换为布尔值的结果,以此类推,直到最后一个表达式,返回那个表达式的值而非转换的布尔值,如果是两个表达式,如果第一个为真,直接返回第二个表达式的值
例子:

var a = 1 && 2;//返归2
var a = 0 && 2;//返回0

||:先判断第一个表达式转换为布尔值是否为真,如何第一个为真直接返回第一个表达式的值,如果为假,在判断第二个,如果只有俩个表达式,及时第二个也为假也返回

var a = 1 || 2; //1
var a = 0 || 2; //2
var a = 0 || false; //false返回最后一个表达式的值

与操作的应用

div.onclick = function(e) {
//非IE浏览器 可以用event 而IE需要用window.event
var event = event || window.event;//可以兼容不同浏览器

!:非就是否,先转换成布尔值,再取反。!!就是直接取布尔值

var a = !"123"; //false
var a = !!""; //false

隐式类型转换
首先当+左右两边没有字符串时需要number()转换,如果有字符串,+号就是连接符。

console.log("123"+123);//"123123"string类型
console.log(false + 123); // 123  number(false) -->0
undefined === undefined
true
null === null
true
NaN == NaN  //NaN不等于任何
false
undefined == null
true
undefined === null
false

例题

var str = false + 1 ; //如果是字符串+就是连接符其他都会调用number()
console.log(str);   //number(false)-->0     0+1=1;
var demo = false == 1;  //false -->number()-->0 == 1 
console.log(demo);//-->false    
if(typeof(a) && -true + (+undefined) + "" ){
    console.log('基础扎实');            //"undefined" && number(true)-->-1  +NaN +""
}
if(11 + "11" * 2 == 33){
    console.log('基础扎实');
}
!!" " + !!"" - !!false||console.log('哈哈哈');
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值