JS day_07(5.16)创建和访问数组 、 数组的常用方法、二维数组
一、检测属性是否存在
对象.属性名===undefined false->存在 ture->不存在
对象.hasOwnProperty('属性名') ture->存在 false->不存在
'属性名' in 对象 ture->存在 false->不存在
检测属性是否存在 | 练习一个商品对象,包含的属性有编号、标题、价格;如果产地属性不存在则添加属性,如果价格属性存在,执行打8折;最后打印对象 |
var person={ name:'小李', sex:'女', } //检测属性是否存在 //console.log(person.name===undefined) //console.log(person.hasOwnProperty('name')) console.log('name' in person) |
var goods={ id:'23', title:'保温杯', price:'168' } if (goods.madeIn===undefined){ goods.madeIn='四川' } if(goods.hasOwnProperty('price')){ //goods.price*=0.8 good.price=goods.price*8/10 } console.log(goods) |
二、对象下的方法
本质上就是一个函数
var p={ play:function(){ this 指向调用方法的对象 } } |
添加方法 | 练习:创建一个圆对象,包含的属性有半径和圆周率,添加方法计算面积返回结果,添加方法计算周长返回结果;最后调用两个方法 |
function fn(){ console.log(this.name+'正在跑步') } var p={ name:'小李', //添加方法 run:fn, play:function(){ //this 这个,表示指向的某一个对象 //this 指向的是调用当前方法的对象 console.log(this) console.log(this.name+'正在打游戏') } } console.log(p) // name: '小李', run: [Function: fn], play: [Function: play] } //调用对象的方法 p.run() //小李正在跑步 p.play() |
var circle={ r:3, pi:3.14, area:function(){ return this.r*this.r*this.pi }, length:function(){ return this.r*2*this.pi } } console.log(circle.area()) console.log(circle.length()) |
三、数据的存储
原始类型:将数据直接存储到栈内存
引用类型(函数、对象、数组):将数据存储到堆内存中,会自动生成一个地址,如果把对象赋给变量,是把对象的地址保存到了栈内存变量;
null:空地址,找不到堆内存中的数据
引用类型的数据占的空间没有限制,如果需要下偶会,这个数据不被任何的地址指向。只需要都赋值为null即可
原始类型存储和引用类型储存 | p1p2是地址进行对比,尽管内容一样,结果任然false |
//原始类型存储 //引用类型储存(函数、对象、数组) console.log(tao) |
var p1={a:1} var p2={a:1} console.log(p1===p2) //false |
值传递 | |
var n=2 function fn(a){ a=a+3 } //变量n中保存的是一个原始类型的值,把n作为参数传递,拷贝一份n的值,和原来的n没有任何关系 fn(n) //fn(n) console.log(n) //2 |
|
址传递 | |
var p={ name:'tao' } function foo(obj){ obj.name='xin' } //p是引用类型,传递的是对象的地址,拷贝一份对象的地址 foo(p) //foo(对象地址) console.log(p.name) //xin |
四、数组
是一个数组的集合,每个数据称为元素
1.创建数组——字面量
[元素1,元素2,...]
//创建数组,保存一组数据 //字面量 //var names=['tao','xin',2,true,null,{},function(){}] //console.log(names) |
练习:创建数组,包含一组工资 var salary=[15000,8213,9845,12321] |
练习:包含一组手机品牌名称 |
2.访问元素
数组[下标]
下标:也称为索引,是自动为每个元素添加的编号,是一个>=0的整数
如果下标不存在返回undefined
下标(索引):数组自动为每个元素添加的编号,从0开始 //访问元素 |
//练习:创建一个数组,包含若干个城市,修改其中的元素,在末尾添加多个元素 |
console.log( phone[0],phone[4]) |
var city=['成都','宜宾','重庆'] console.log(city) |
3.长度属性
数组.length 获取数组元素的个数
在数组的末尾添加元素 数组[数组.length]=值
//长度 console.log(city.length) city[city.length]='太原' console.log(city) |
//练习:创建一个空数组,使用数组长度往末尾 添加若干个用户名 var names=[] names[names.length]='小红' names[names.length]='小兰' names[names.length]='美琪' names[names.length]='美雪' console.log(names) |
4.创建数组——内置构造函数
new Array(元素1,元素2,....)
new Array(3) 创建数组,初始化长度值,可以添加更多元素
//内置构造函数 | //练习:创建数组,包含若干个国家 |
var arr=new Array('a','b','c') |
var contry=new Array('中国','意大利','新加坡') console.log(contry) //练习:创建数组,初始化长度为4,添加四个商品名称 var goods=new Array(4) goods[0]='笔' goods[1]='水杯' goods[2]='筷子' goods[3]='汤勺' console.log(goods) |
5.数组分类
索引数组:以>=0整数作为下标
关联数组:以字符串作为下标,需要单独添加元素
数组分类 | //练习:创建数组包含一组员工,每个员工是一个元素,包含的属性有姓名,性别,工资 |
var p=[1] |
var emp=[ {name:'小红',sex:'女',salary:5000}, {name:'小明',sex:'男',salary:4500}, {name:'小兰',sex:'女',salary:12000} ] console.log(emp) //获取到小明 4500 console.log(emp[1].name,emp[1].salary) |
6.数组和对象有什么区别
两者都是可以存储一组数据,对象的数据放到属性中,数组的数据放到了元素中
对象的数据是一组无序排列的数据,数组的数据是一组有序排列的
7.遍历数组
依次访问数组中的每个元素
for(var k in 数组){ k 代表下标 数组[k] 下标对应的元素 } |
for(var i=0;i<数组.length;i++){ i 代表下标 数组[i] 下标对应的元素 } |
var arr=[5000,8500,1200,9000] //遍历 for(var k in arr){ //k 代表下标 //arr[k] 下标对应的值 console.log(k,arr[k]) } //for循环(0~3循环) for(var i=0;i<arr.length;i++){ //i代表下标 console.log(arr[i]) } |
练习:创建数组,包含一组成绩,遍历数组,计算出总成绩和平均成绩 |
var score=[95,85,75] var avg for(var i=0,sum=0;i<score.length;i++){ sum+=score[i] } avg=sum/score.length console.log(sum,avg) |
|
练习:创建数组,包含一组数字,遍历数组,获取最大值 | |
var num=[85,65,56,98,83] |
JS day_07(5.16)创建和访问数组 、 数组的常用方法、二维数组相关推荐
- c语言二维数组行优先如何访问快,C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why?...
C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读) ...
- 如何访问自定义键值的二维数组
2019独角兽企业重金招聘Python工程师标准>>> <?php//访问自定义键值的二维数组$products = array(array('name'=>'apple ...
- js一维数组,api,二维数组
1.定义数组 空数组 1.数组字面量:[ ] var 变量名 = [ ]://定义一个空的数组把数组保存到变量中 2.新的数组对象 var 变量名 = new Array()://定义一个新的数组对象 ...
- 【C语言数组】一、二维数组冒泡排序
目录 1. 一维数组的创建和初始化 1.1 一维数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 ...
- 【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
文章目录 一.抽象 二维数组 业务函数 1.二维数组 打印函数 2.二维数组 排序函数 二.完整代码示例 一.抽象 二维数组 业务函数 1.二维数组 打印函数 注意 , 二维数组 作为 函数参数 输入 ...
- 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...
- Java 数组(三)二维数组
如果一维数组的各个元素仍然是一个数组,那么它就是一个二维数组.二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表所在的列. 一.二维数组的创建 1.先声明, ...
- Java二维数组详解:二维数组的声明和初始化,以及获取二维数组的值
为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来.二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列.下面 ...
- 数组--如何通过【二维数组+稀疏数组】实现五子棋盘,并且保存记忆功能?
一.应用场景 通过Java + 二维数组 + 稀疏数组实现一个五子棋盘功能,并且具有保存记忆功能. 二.实现原理 2.1 二维数组 大家都知道一维数组,不过一维数组的属于线性结构,而二维数组则属于非线 ...
最新文章
- elk日志分析系统_部署ELK企业内部日志分析系统
- rails2.3.5 添加jquery ui 找不到images
- 高可用集群中的选举机制
- 一篇文章搞定GVIM(根据工作经验持续更新)
- CMDB经验分享之 – 剖析CMDB的设计过程
- zabbix mysql安装配置_ZABBIX4.4 安装及配置
- java抠图边框颜色处理_java 实现抠图(项目应用场景:抠图章)
- Caffe傻瓜系列(11):caffe中的lr_policy选择
- Fragment学习(二): 管理Fragment和Fragment通讯
- 在python中查询excel内容
- 拍视频到底用手机还是相机好?
- norms matlab
- 抓包PC微信小程序失败解决方法
- Multisim中元器件的翻转方法以及快捷键,最详细,最清晰!!!
- 深度学习在知识图谱的应用
- Java webp图片处理
- .Dragon4444勒索病毒处理成功方法
- Java技术——Interface与abstract类的区别
- Linux从入门到放弃 docker
- 不讲武德!小伙陪大爷下棋靠手机开挂艰难获胜:我选的是天人合一难度
热门文章
- Django QuerySet优化
- aws 噼里啪啦做了一天测试 花了4$
- 16、Java 基础-反射
- 微信拼手气红包C语言,微信拼手气红包背后的算法逻辑
- linux搭建filebrowser教程,使用File Browser 搭建远程文件管理器
- Ubuntu18.04设置连接网络,使虚拟机下的Ubuntu18.04可以上网
- 会议交流 | 京东硅谷首席科学家领衔,图机器学习峰会火热开启!
- 如何免费创建移动端论坛APP?
- 乌拉姆距离(Ulam)
- 人工智能教程 - 数学基础课程1.2 - 数学分析(二)6-7. 速度,加速度和开普勒第二定律