值类型
不可改变的原始值(栈数据)
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('哈哈哈');