目录
1.javascipt的数据类型
1.1基本类型
1.2引用类型
1.3存储方式的区别
1.4 undefined和null的区别
1.5JavaScript什么情况下会返回undefined值?
2.javaScript数据类型检测的方法
2.1 typeof
2.2 instanceof
3.创建函数的几种方式
3.1 函数声明式
3.2函数表达式
3.3函数对象方式
4.Javascript创建对象的几种方式
4.1 字面量方式
4.2使用构造函数⭐⭐
new关键字的作用:
4.3工厂模式
4.4使用原型对象的方式prototype关键字
4.5混合模式(原型和构造函数)
5.JavaScript宿主对象和原生对象的区别。
原生对象:
宿主对象
6.=== 和==的区别
=== 三个等号称为同等符。
==:两个等号称为等值符
7.如何区分数组和对象?
8.怎样判断两个对象相等
Number、String、Boolean、Undefined、null、symbol
undefined:表示不存在这个值。一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但还 没 有定义。当尝试读取时会返回 undefined
例如变量被声明了,但没有赋值时,就等于 undefine
null: 表示一个对象被定义了,值为’空值‘
null == undefined // true
null === undefined // false
判断简单数据类型
判断复杂数据类型
function sum(num1,num2){
return num1+num2;
}
var sum=function(num1,num2){
return num1+num2;
}
var sum=new function('num1','num2','return num2+num1')
const Cat={}
Cat.name='ruiky' //给对象添加属性并且赋值
Cat.say=function(){
console.log('haha');
} //给对象添加方法
Cat.say() //调用对象的方法
//构造函数模式
function Person(name, age, sex) {
this.name = name
this.age = age
this.sex = sex
}
let Person1 = new Person('小蘑', 18, '男')
console.log(Person1);
构造函数在js(ES5)中相当于其它面向对象编程语言中的类,对象称为类的实例,类称为对象公共特性的抽象。构造函数创建对象的过程又称为实例化。
1.创建空对象并让this指向该空对象
2.执行构造函数,给空对象增加属性
3.返回已增加了属性的对象
function star(name, age, song) {
var o = {};
o.uname = name;
o.age = age;
o.sing = function () {
console.log(song);
};
return o;
}
var zjl = star('周杰伦', 40, '七里香');
//原型对象
function Dog() {}
Dog.prototype.name = "小黑";
Dog.prototype.eat = function() {
console.log(this.name + "喜欢吃骨头");
}
const ruiky = new Dog()
ruiky.eat()
此处省略。。。
“独立于宿主环境的 ECMAScript 实现 提供的对象” 包含:Object、Function、Array、String、Boolean、Number、 Date 、 RegExp 、 Error 、 EvalError、RangeError、ReferenceError、SyntaxError、TypeError、 URIErro
BOM 和 DOM 都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白 了就是,ECMAScript 官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通 过 ECMAScript 程序创建的对象
1.通过ES6中的Array.isArray 来识别
Array.isArray([]) //true
Array.isArray({}) //false
2.通过instanceof 识别
[] instanceof Array //true
{} instanceof Array //false
3.通过调用constructor来识别
{}.constructor //返回 object
[].constructor //返回 Array
4.通过 Object.prototype.toString.call
Object.prototype.toString.call([]) //["object Array"]
Object.prototype.toString.call({}) //["object Object"]
ES6中 Object.is() 方法来比较两个对象引用的内存地址是否一致来判断这两个对象是否相等。
参考步骤如下:
1.判断两个对象是否指向同一内存
2.使用Object.getOwnPropertyNames获取对象所有键名数组
3.判断两个对象的键名数组是否相等
4.遍历键名,判断键值是否都相等