一、数据类型转换
//转换成数字
var str = "11";
var bool = true;
console.log(typeof (str-0));
console.log(typeof (bool-0));
console.log(typeof (str*1));
console.log(typeof (bool*1));
console.log(typeof (str/1));
console.log(typeof (bool/1));
console.log(typeof typeof (bool/1)); //数据类型是用string定义的
console.log(typeof Number(str));
console.log(typeof Number(bool));
//
//
var str2 = "12.34abc";
var str3 = "12.34";
console.log(parseInt(str2));
console.log(parseFloat(str2));
console.log(Number(str3));
//布尔类型转换
var date = new Date(); //
console.log(Boolean(0));
console.log(Boolean(""));
console.log(Boolean(null));
console.log(!!1);
console.log(!!"abc");
console.log(!!date);
二、变量作用域
//隐式全局变量
function fn(){
//b和c都是隐式全局变量
var a = b = c = 1;
//e和f都是隐式全局变量(分号相当于换行)
var d = 1;e =2;f=3;
//g和i都不是隐式全局变量
var g = 1,h= 2,i=3;
}
fn();
console.log(b);
console.log(c);
console.log(e);
console.log(f);
// console.log(a);
console.log(h);
console.log(i);
三、变量声明提升和预解析
//预解析:js的解析器在页面加载的时候,首先检查页面上的语法错误。把变量声明提升起来。
//变量值提升变量名,不提升变量值。而用function直接定义的方法是整体提升。
//1.查看语法错误。
//2.变量声明提升和函数整体提升(变量声明提升的时候,只提升变量名,不提升变量值)
//3.函数范围内,照样适用。
var aaa;
console.log(aaa);
aaa = 111;
fn();
function fn(bbb){
//变量声明提升在函数内部照样实用。
//函数的就近原则。
var aaa;
console.log(aaa);
aaa = 222;
}
function fn2(bbb){
//两个函数中的局部变量不会相互影响。
console.log(bbb);
}