Day5
(2)DOM是文档对象模型,规定了文档的显示结构,可以轻松地删除、添加和替换节点
(3)BOM是浏览器对象模型,就是浏览器自带的一些功能样式,如搜索框,设置,等学习浏览器窗口交互的对象。
i;
alert(i == undefined);//true
var i;与var i =
undefined;
这两句是等价的。
包含Undefined值的变量和未定义的变量是不一样的。
Null类型也只有一个值:null。null表示一个空对象的指针。
Boolean类型:只有两个字面量true和false。但是js中多有的变量都可以使用Boolean()函数转换成一个Boolean类型的值。
Number类型:整数和浮点数。NaN:Not
a Number。这个数值用于本来要返回一个数值,但是却未能放回一个数值的情况,以防止报错。例如:1/0
返回的就是NaN。NaN的特点:1、任何涉及NaN的操作都会返回NaN。2、NaN对任何值都不相等,包括自己NaN本身。
针对NaN特性,JS内置了isNaN()函数,来确定数值是不是NaN类型。
String类型:略
typeof操作符:对一个变量进行推断变量的类型,可能返回以下字符串:
"undefined"
如果这个值,未定义或者为初始化
"boolean" 布尔值
"string" 字符串
"number" 数值
"object"
对象
"function" 函数
用法:typeof 95; 或者 typeof(95); 会返回"number".
基本类型(简单类型、原始类型):String、Number、Boolean、Null、Undefined、Symbol
引用类型(复杂类型):Object(对象、Function、Array)
1、typeof返回结果是该类型的字符串形式表示【6】(number、string、undefined、boolean、function、object)
注意
typeof对于原始类型来说,除了null都可以显示正确类型
typeof对于对象来说,除了函数都会显示object
2、instanceof是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型。
但是instanceof可以判断出[]是Array的实例,同时也认为是Object的实例,Why????
instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。
之后增加了Array.isArray()方法判断这个值是不是数组的。
总结一下:
1、typeof能够检测出了null之外的原型类型(String、Number、Boolean、Undefined),对于对象类型能判断出function、其他的都为Object
2、判断一个值是否为数组,使用Array.isArray()
3、如果需要判断一个值是否为null,最直接就是与null比较
console.log("3好")
function(){
console.log("我是匿名函数,通过给我在外边加一层括号来实现自动执行")
}
)();
第二种方法:
console.log("我是匿名函数,通过在我前面加+号或-号或!或者~来实现自动执行")
+function (){
console.log("我是通过+来实现的")
}();
-function (){
console.log("我是通过-来实现的")
}();
!function (){
console.log("我是通过!来实现的")
}();
~function (){
console.log("我是通过~来实现的")
}();
fu使用new关键字调用函数,即是构造函数
// 构造函数:function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new objectvar x = new myFunction("John","Doe");
x.firstName; // 返回 "John"
构造函数的调用会创建一个新的对象,新对象会继承构造函数的属性和方法。
构造函数中 this 关键字没有任何的值。
this 的值在函数调用时实例化对象(new object)时创建。也就是指向了新创建的那个对象nction fun(){
alert("hello world");
}
fun();
调用时this指针指向的是函数所属的对象,当函数没有被自身的对象调用时,this就是全局变量,在WEB浏览器中This指向浏览器对象(window对象)
2函数作为对象方法调用
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // 返回 "John Doe"
This指向函数所属对象本身,也就是myObject
3使用构造函数调用函数
使用new关键字调用函数,即是构造函数
// 构造函数:function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new objectvar x = new myFunction("John","Doe");
x.firstName; // 返回 "John"
构造函数的调用会创建一个新的对象,新对象会继承构造函数的属性和方法。
构造函数中 this 关键字没有任何的值。
this 的值在函数调用时实例化对象(new object)时创建。也就是指向了新创建的那个对象
4使用apply()和call()方法调用
call()方法
function myFunction(a, b) {
return a * b;
}
myFunction.call(myObject, 10, 2); // 返回 20
可以看到call方法调用时,第一个参数必须是一个对象,这样调用的用处即是这里的This指向了函数第一个参数所给的对象
/*定义一个Person类*/ function Person(name,age) {
this.name=name;
this.age=age;
}
/*定义一个学生类*/
function Student(name,age,grade) {
//Person.apply(this,arguments);//特点:this指代student对象,只接收2个参数,arguments为隐式类数组对象,用来接收传入的参数;
Person.call(this,name,age);//特点:this指代student对象,可以接收任意多个参数
this.grade=grade;
}
var student =new Student("zhangsan",22,"二年级");//方法Student()也是object的一个实例
//测试
alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);//学生类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.
apply()
function myFunction(a, b) {
return a * b;
}
myArray = [10,2];
myFunction.apply(myObject, myArray); // 返回 20
call()方法和apply()方法的区别即是,apply方法调用函数时,相关实参依次放在第一个参数之后,而apply()传递的是一个数组


浙公网安备 33010602011771号