Day5

一-js 组成?
1.ECMAScript 2.DOM(document object model)3.BOM(browser object document ) (1)ECMA是(欧洲计算机制造商协会)它规定了js的语法标准。 
(2)DOM是文档对象模型,规定了文档的显示结构,可以轻松地删除、添加和替换节点 
(3)BOM是浏览器对象模型,就是浏览器自带的一些功能样式,如搜索框,设置,等学习浏览器窗口交互的对象。
二js 中有哪些数据类型?
有五种数据类型:Undefined。Null,Boolean,Number和String。
还有一种复杂的数据类型Object,Object本质是一组无序的名值对组成的。
Undefined类型只有一个值,即undefined,使用var声明变量,但未必对初始化的,这个变量就是Undefined类型的,例子:var

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".

三typeof 和 instanceof 的区别
js中会使用typeof和instanceof来判断一个变量是否为空或者是什么类型的。
Es6规范中有七种数据类型,分别是基本类型和引用类型两大类

基本类型(简单类型、原始类型):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比较 

四-怎么判断两个对象想到等
public class Class1
{
private int m;
private string n;
public int M
{
set { m = value; }
get { return m; }
}
public string N
{
set { n = value; }
get { return n; }
}
public override bool Equals(object obj)
{
Class1 anotherClass = obj as Class1;
if (anotherClass != null)
return (
this.m == anotherClass.m &&
this.n.Equals(anotherClass.n));
else
return false;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public Class1()
{
}
}
如果你要比较两个类是否相等,需要在类里面override Equal方法,就如上面的例bai子那样。。 override Equal方法的同时需要override GetHashCode方法。
这样,你就可以比较这个类的两个对象是否相等了。
例如
Class1 class1 = new Class1();
class1.M = 1;
class1.N = "a";
Class1 class2 = new Class1();
class2.M = 1;
class2.N = "a";
bool isEqual = class1.Equals(class2);
这个时侯isEqual就会返回true
当然这是你的自定义类。如果你只是比较.net的类对象,那就是Equal方法就可以了。。
override Equal方法其实会是一个比较复杂的方法。使用时需要慎重。。特别是你的类里面本身还有很多复杂对象的时候。需要考虑完整。否则你的比较结果会是不准确的。
五js 中函数有哪些定义方式?
第一种方法:
function fn1(){
console.log("3好")
}
fn1()
第二种方法:
var rec = function(){
console.log(''3号")
}
rec();
匿名函数:
第一种方法:

function(){

console.log("我是匿名函数,通过给我在外边加一层括号来实现自动执行")

}

 

 

 

)();

第二种方法:

 

console.log("我是匿名函数,通过在我前面加+号或-号或!或者~来实现自动执行")

 

 

 

+function (){

console.log("我是通过+来实现的")

}();

-function (){

console.log("我是通过-来实现的")

}();

!function (){

console.log("我是通过!来实现的")

}();

~function (){

console.log("我是通过~来实现的")

}();

 

六-js 中函数有哪些调用形式?
1,以函数形式调用

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);//学生类里面我没有给nameage属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.

apply()

function myFunction(a, b) {

    return a * b;

}

myArray = [10,2];

myFunction.apply(myObject, myArray);   // 返回 20

call()方法和apply()方法的区别即是,apply方法调用函数时,相关实参依次放在第一个参数之后,而apply()传递的是一个数组

 

 

 

posted @ 2021-02-03 14:06  景沁同学  阅读(50)  评论(0)    收藏  举报