1、JS基本数据类型中null和undined的区别以及应用
都是代表没有值
区别:null表示 "没有对象",该处不应该有值
undefined表示 "缺少值",该处应该有值,但是还没定义
转为数值也不同,null->0,undefined->NaN(不是一个数字)
什么时候会有null:
a、作为函数的参数,表示该函数的参数不是对象
b、作为对象原型链的终点
什么时候会出现undefined:
a、变量被声明了,但是没有赋值,就等于undefined
b、调用函数时,应该提供的参数没有提供,该参数就等于undefined
c、对象没有赋值的属性,该属性的值为undefined
d、函数没有返回值时,默认返回undefined
2、JS中如何判断一个属性是属于实例对象还是继承于构造函数
hasOwnProperty() 检测一个属性是否属于自身对象,还是继承于原型链上的
function Person(name, age) {
this.name = name;
this.age = age;
};
Person.prototype.sex = '男';
let p = new Person('小飞', 25);
console.log(p.hasOwnProperty('name'));//true
console.log(p.hasOwnProperty('sex'));//false
3、JS中如何阻止事件冒泡和默认行为
阻止默认行为 e.preventDefault()
阻止事件冒泡 e.stopPropagation() 在子元素事件监听中
4、JS数据类型检测的方式有哪些
// 1、typeof(检测数据类型的运算符)
console.log("数值", typeof 10);
console.log("布尔", typeof true);
console.log("字符串", typeof '你好');
console.log("数组", typeof []);
console.log("函数", typeof function () {});
console.log("对象", typeof {});
console.log("undefined", typeof undefined);
console.log("null", typeof null);
// 2、instanceof(检测某一个实例是否属于这个类)
// 可以正确判断对象的类型,内部运行机制,判断它的原型链上能否找到这个类型的原型
console.log("数值", 10 instanceof Number);
console.log("布尔", true instanceof Boolean);
console.log("字符串", "你好" instanceof String);
console.log("数组", [] instanceof Array);
console.log("函数", function () {} instanceof Function);
console.log("对象", {} instanceof Object);
// 3、constructor(检测实例和类的关系,从而检测数据类型),引用原来构造该对象的函数
console.log("数值", (10).constructor === Number);
console.log("布尔", (true).constructor === Boolean);
console.log("字符串", ('你好').constructor === String);
console.log("数组", ([]).constructor === Array);
console.log("函数", (function () {}).constructor === Function);
console.log("对象", ({}).constrictor === Object);
// 4、Object.prototype.toString.call()(检测数据类型)
// var a=Object.prototype.toString;
console.log("数值", a.call(10));
console.log("布尔", a.call(true));
console.log("字符串", a.call('你好'));
console.log("数组", a.call([]))
console.log("函数", a.call(function(){}))
console.log("对象", a.call({}));
console.log("undefined", a.call(undefined));
console.log("null", a.call(null));
5、JS有哪些数据类型,他们的区别是?
总共七种
基本数据类型:string/number/boolean/null/undefined/symbol(代表创建之后独一无二且不可变的数据类型)
引用数据类型:Object
区别:
a、声明变量时的存储分配
基本数据类型存储栈中,var a =10;
引用数据类型存储在堆中,var arr = [1, 2, 3];
b、不同的内存分配机制也带来了不同的访问机制
不可以直接访问堆内空间的位置以及直接操作堆内存空间,只能操作对象在栈内存中引用地址
基本数据类型直接访问到,引用数据类型方位引用地址,根据引用地址找到堆中实体
c、复制变量的不同
基本数据类型:var a = 1, var b = a 将原始的值复制新的变量,传值
引用数据类型:var obj = {name: '小飞'}, var obj1 = obj, 将引用地址赋值给新变量,传址