博客
关于我
javascript中对象、JSON格式数据、创建对象的方式、数据类型分类及特点
阅读量:338 次
发布时间:2019-03-04

本文共 4665 字,大约阅读时间需要 15 分钟。

对象

对象指:具体的一个实物,javascript中对象是指一组没有顺序的属性和方法的集合,所有的事物都是对象,例如:函数,数组,字符串等。属性指事物的特征,一般为名词表示;方法指对象的行为,一般用动词表示。对象使用来存储一组没有规律的信息的数据类型。

JSON格式的数据:

一般都是成对的,是键值对。JSON也是一个对象,数据都是成对的,一般JSON格式的数据无论是键还是值,都是用双引号引起来的

        //编程思想:把生活中的事融入到程序中        //面向过程:凡是亲力亲为,每件事的过程都要知道,注重的是过程。        //面向对象:根据要求找对象,所有的事都要对象来做,注重结果。        //面向对象的特征:封装,继承,多态(抽象性)        //JavaScript不是面向对象语言,但是可以模拟面向对象思想。        //JavaScript是基于对象的语言。        //对象:看得见,摸得着,具体特质的东西。        //面向对象有什么特点:特征和行为    //instanceof判断一个变量的数据类型,具体方法:变量 instanceof 数据类型,返回的是布尔值。 

创建对象的方式:

1.通过字面量的方式创建对象:js中以字面量的方式创建对象使用{},如:var obj = {}一个空对象;给对象添加属性:属性名:属性值,每个属性之间用逗号隔开;给对象添加方法:方法名:function(){},每个方法之间用逗号隔开;调用对象的属性:对象名.属性名或对象名[‘属性名’],调用对象的方法:对象名.方法名();

	<script>        var obj = {                nameObj: 'obj',            age: 18,            sex: '男',            say: function() {                    console.log('hello');            },            play: function() {                    console.log('play basketball')            }        };        console.log(obj.age); //18        console.log(obj['sex']); //男        obj.say();//hello    </script>

2.调用系统的构造函数创建对象:new Object();同样是一个空对象,这种方法添加属性的方式为:对象名.属性名 = 属性值;添加方法的方式:对象名.方法名 = function(){};每个属性和方法之间用封号隔开,其调用和字面量的方式一样。

	<script>        var obj = new Object();        obj.name = '涵涵';        obj.age = 18;        obj.sex = '男';        obj.say = function() {                console.log('hello');        };        console.log(obj.age); //18        console.log(obj['sex']); //男        obj.say(); //hello    </script>

3.自定义构造函数创建对象:以上两种方式不能重复创建对象,如果创建新对象,那么就要重新声明,通过构造函数的方式可以一次性创建多个对象,以便解决代码重复问题。自定义构建函数创建对象做的事:1,在内存中开辟(申请)空间,存储创建的新对象2,把this设置为当前对象3,设置对象的属性和方法4,把this这个对象返回;遍历对象是通过for-in来实现的,其中变量是对象的属性,对象[变量]拿到的才是属性值;

	<script>        function Student(names, age) {                this.names = names;            this.age = age;            this.say = function(says) {                    console.log(says);            };        };        var stud1 = new Student('小明', 18);        console.log(stud1.names); //小明        stud1.say('hello'); //hello        var stud2 = new Student('涵涵', 15);        console.log(stud2.age); //15        stud2.say('你好'); //你好                function Student(names, age) {                this.names = names;            this.age = age;            this.say = function(says) {                    console.log(says);            };        };        var stud1 = new Student('小明', 18);        for (var k in stud1) {                // console.log(k); // name age say            console.log(stud1[k]);// 小明 18 ƒ (says) {console.log(says);}        };    </script>

工厂模式创建对象(不是一种方式):

工厂模式创建对象和构造函数创建对象其共同点是:都需要自定义函数;其不同点:工厂模式创建对象函数名首字母小写,函数中要new Object(),有返回值,创建时不需要new的方式(通过构造函数创建对象函数名首字母大写,函数中不需要写new Object(),无返回值,创建时需要new的方式),

	<script>        function person(name, age, height, weight) {                var obj = new Object();            obj.name = name;            obj.age = age;            obj.height = height;            obj.weight = weight;            obj.play = function() {                    console.log('打游戏');            }            return obj;        };        var person1 = person('jack', 18, 170, 50);        console.log(person1.name);    </script>

数据类型分类及之间的特点:

 // 原始数据类型:number string boolean undefined null object// 基本类型(简单类型,值类型):number string boolean// 复杂类型(引用型):object// 空类型:undefined null// 值类型的值储存在:栈中// 引用类型的值储存在:地址在栈上储存,对象在堆上储存// var num = 10;//值类型,值在栈上// var obj = {};//复杂类型,对象在堆上,地址(引用)在栈上// 值类型之间的传递,传递的是值// 引用类型间的传递,传递的是地址(引用)// 值类型作为函数的参数,传递的是值// 引用型作为函数的参数,传递的是地址
	<script>        var num1 =10;        var num2 = num1;        num1 = 20;        console.log(num1);//20        console.log(num2);//10                var num = 50;        function f1(num){                num = 60;            console.log(num);//60        }        f1(num);        console.log(num);//50;                var num1 = 55;        var num2= 66;        function f1(num,num1){                num = 100;            num1  = 100;            num2 = 100;            console.log(num);//100            console.log(num1);//100            console.log(num2);//100        }        f1(num1,num2);        console.log(num1);//100        console.log(num2);//100        console.log(num);//报错,函数里面的num相当于外面的num1,所以没有num这个变量                function Person(name,age,salary){                this.name=name;            this.age=age;            this.salary=salary;        }        function f1(person){                person.name='小明';            person = new Person('慧慧',20,1000);        }        var p =new Person('敏敏',30,10);        console.log(p.name);//敏敏        f1(p);        console.log(p.name);//小明    </script>

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者 删除。
笔者:苦海

转载地址:http://sane.baihongyu.com/

你可能感兴趣的文章
C++中找资源或者函数的方法
查看>>
一些留给自己的思考题(只求回过头来能够有所获)
查看>>
SQL函数返回表的写法
查看>>
delete对象时会自动调用类的析构函数
查看>>
C++ 子类对象直接赋值给父类对象可行,反过来不行
查看>>
linux下同一个动态库名为何辣么多的.so文件
查看>>
SQL联表的方式(逗号, Left Join, Right Join)
查看>>
牛客网输入输出举例
查看>>
字符串初始化时的注意点
查看>>
软考相关试题
查看>>
顺序表的操作
查看>>
常量表达式
查看>>
POD类型
查看>>
const与常量,傻傻分不清楚~
查看>>
Head First设计模式——迭代器模式
查看>>
MongoDB版本及存储引擎区别
查看>>
shell echo单行和多行文字定向写入到文件中
查看>>
AtCoder Beginner Contest 100 题解
查看>>
【数据结构】可持久化线段树初步
查看>>
Java高性能编程之CAS与ABA及解决方法
查看>>