JS预解析
JS运行时会将内部先把带有var和function关键字的声明提升到当前作用域的最顶端,
var 定义的变量预设为undefined,function设为函数字符串
函数的预解析优先级要比用 var 声明的变量优先级高
函数内部也会进行预解析
alert(a);//输出函数a
var a= 100;
function a () {
console.log("hello")
}
//函数内部的预解析
function fn(){
console.log(a);//输出函数a
var a = 1;
function a(){
console.log(1)
}
}
fn()
判断数据类型的方法
1:typeof,基本数据类型没有问题,引用数据类型有问题
2:instanceof,基本数据类型会有问题,引用数据类型没有问题
//基本数据类型
console.log("1" instanceof String); //false
console.log(1 instanceof Number); //false
console.log(true instanceof Boolean); //false
//引用数据类型
console.log([] instanceof Array); //true
console.log(function(){} instanceof Function); //true
console.log({} instanceof Object); //true
3:constructor,除了undefined和null,其它变量都能使用constructor判断类型
console.log(("1").constructor === String); //true
console.log((1).constructor === Number); //true
console.log((true).constructor === Boolean); //true
console.log(([]).constructor === Array); //true
console.log((function(){}).constructor === Function); //true
console.log(({}).constructor === Object); //true
console.log((null).constructor === Null); //报错
console.log((undefined).constructor === Undefined); //报错
声明了一个构造函数,并且把他的原型指向了Array的原型
function Fn(){};
Fn.prototype=new Array();
var f=new Fn();
console.log(f.constructor===Fn); //false
console.log(f.constructor===Array); //true
4:Object.prototype.toString.call();
console.log(Object.prototype.toString.call(1)); //[object Number]
console.log(Object.prototype.toString.call("1")); //[object String]
console.log(Object.prototype.toString.call(true)); //[object Boolean]
console.log(Object.prototype.toString.call([])); //[object Array]
console.log(Object.prototype.toString.call(function(){})); //[object Function]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
本文探讨了JavaScript中的预解析机制,详细解释了var和function声明的提升规则,以及函数内部的预解析行为。同时,文章介绍了几种判断数据类型的方法,包括typeof、instanceof、constructor以及使用Object.prototype.toString.call(),并指出了这些方法在处理不同数据类型时可能遇到的问题。

被折叠的 条评论
为什么被折叠?



