有点烦,遇到了一个招聘转培训的骗局,幸好那帮家伙还有点良心让我全身而退。
不过生活还是要继续,接着冲冲冲!
JavaScript的基本数据类型
JavaScript的数据类型,共有六种。分别是undefined、null、boolean、number、string、object(ES6新增第七种Symbol一种数据类型,它的实例是唯一且不可改变的类型的值)。
1、Undefined:Undefined类型只有一个值,即特殊值undefined。在使用var声明变量,但未对其加以初始化时,这个变量值就是undefined。
2、Null:Null类型是第二个只有一个值的数据类型。其特殊值就是Null。从逻辑角度上看,null是一个空的对象指针。而这也正是使用typeof操作符检测null值,会返回“object”的原因。
3、Boolean:即布尔类型,该类型有两个值:true、false。需要注意的是,Boolean类型的字面值true和false是区分大小写的。也就是说,True和False(以及其它的混合大小形式)都不是Boolean值,只是标识符。
4、Number:该类型的表示方法有两种形式,第一种是整数,第二种为浮点数。整数:可以通过十进制,八进制,十六进制的字面值来表示。浮点数:就是该数值中必须包含一个小数点,且小数点后必须有一位数字。
5、String:String类型用于表示由零或多个16位的Unicode字符组成的字符序列,即字符串。至于用单引号,还是双引号,在js中还是没有差别的。记得成对出现。
6、Object:Object数据类型,称为对象,是一组数据和功能(函数)的集合。可以用new操作符后跟要创建的对象类型的名称来创建。也可以用字面量表示法创建。在其中添加不同名(包含空字符串在内的任意字符串)的属性。
JavaScript创建对象的方法
JavaScript中创建对象的方法如下:
一:使用new关键字调用构造器创建对象;
在JavaScript中,所有的函数名可以看成一个类名;
函数名和其参数可以看成一个构造器用于构造对象;
使用构造函数模式创建对象的几点注意事项:
(1):没有明显的创建对象
(2):直接将属性和方法赋给this对象
(3):没有return语句
(4):创建Student实例的时候,必须要使用new操作符;
function Student(name,age){
this.name=name;//this是当前对象的引用;
this.age=age;
}
var s1=new Student();//没有传入参数,函数里面的name,age是undefine
var s2=new Student("wangshicheng",20);
document.write(s1.name+s1.age);//都是undefine;
document.write(s2.name+s2.age);//都是传入实参的值;
二:使用Object直接创建对象
var myObj=new Object();//使用Object类创建一个空的对象
myObj.name="wangshihcheng";
myObj.age=20;
myObj.infor=function(){
document.write("名字:"+this.name);//this.的指向问题
document.write("年龄:"+this.age);
}
myObj.infor();//调用创建的对象里面的方法;
三:使用JSON创建对象的语法
//object={属性名1:属性值1,属性名2:属性值2,…}
//注意JOSN格式中属性名要加双引号;
var p={
"name":"wangsch",
"gender":"man",
"age":40,
"son":[
{
"name":"son1",
"age":2
},
{
"name":"son2",
"age":5
}
],
"infor":function(){
document.write("父亲的姓名:"+this.name+",父亲的年龄:"+this.age+"<br>");
for( var child in this.son ){
document.write("儿子的姓名:"+this.son[child].name+",儿子的年龄:"+this.son[child].age+"<br>");
}
}
}
p.infor();//调用对象p中的infor方法
四:原型模式创建对象
在JavaScript中,每个函数都有一个prototype属性,它是一个指针,指向一个对象,叫做原型对象,原型对象包含了可以由特定类型的所有实例对象共享的属性和方法;
另外,这个对象有一个自带的属性constructor,指向创建对象的构造方法;
当我们使用原型模式时可以使所有的实例共享原型对象的属性和方法,
从而我们不必要早构造函数中定义对象的实例的信息;
function Student(){
}
Student.prototype.name="wang";
Student.prototype.sex="man";
Student.prototype.class="5";
Student.prototype.sayName=function(){
console.log(this.name);
}
var s1=new Student();
s1.sayName();//wang
var s2=new Student();
s2.sayName();//wang
s2.name="shicheng";
s2.sayName();//shicheng
当我们读取某个对象的属性时,都会执行一次搜索,搜索首先从对象实例本身开始,
如果在实例中找到了这个属性,则搜索结束,返回属性的值;
若实例上没有找到,则继续向对象的原型对象上面延申,搜索对象的原型对象,若在原型上面
找到这个属性,则返回原型上面属性对应的值,若没有找到,则返回undefine;
因此,可以看出,实例对象属性会覆盖原型对象上面的属性;
五:组合使用构造函数和原型模式
构造函数用于定义实例的属性,原型模式则用于定义方法和共享的属性;
function Student(name,sex,grade){
this.name=name;
this.sex=sex;
this.grade=grade;
}
Student.prototype.sayName=function(){
console.log(this.name);
}
Student.prototype.school="nongda";
这种混合模式可以支持想构造函数传入参数,还极大的节约了内存。
这次的内容确实简单并且少了一点,下次再继续。