JavaScript学习笔记(基础篇一)数据类型和数组函数

1、数据类型

 js中数据类型主要有Number类型,字符串类型,布尔类型,数组类型,对象类型。

其中Number类型有整形,浮点型,负数型,科学计数法型.

还有一个NaN,它表示某个对象不是一个Number,这在无法计算结果的时候会出现,比如你用一个字符串去除以一个数字,那结果就是NaN,我们可以用Number.isNaN()函数来判断一个对象是否是NaN的。

还要记住:

console.log(typeof NaN === "number");  // logs "true"

console.log(NaN === NaN); // logs "false"

然后还有一个Infinity,表示数无限大,也就是超过了js设置的Number的最大值。

其中字符串可以用单引号或者双引号括起来,但在json文件中必须用双引号。

布尔值就是true或者false,它们之间可以用&&,||进行组合

undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。

null的类型被定义为object。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

js 代码

 

  1. var oValue;  
  2. alert(oValue == undefined); //output "true"  


这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。

js 代码

 

  1. alert(null == document.getElementById('notExistElement'));  


当页面上不存在id为"notExistElement"的DOM节点时,这段代码显示为"true",因为我们尝试获取一个不存在的对象。

js 代码

 

  1. alert(typeof undefined); //output "undefined"  
  2. alert(typeof null); //output "object"  


第一行代码很容易理解,undefined的类型为Undefined;第二行代码却让人疑惑,为什么null的类型又是Object了呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。

js 代码

 

  1. alert(null == undefined); //output "true"  


ECMAScript认为undefined是从null派生出来的,所以把它们的值定义为相等的,也即是用两个=会是返回true的。但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法。

js 代码

 

  1. alert(null === undefined); //output "false"  
  2. alert(typeof null == typeof undefined); //output "false"  


使用typeof方法在前面已经讲过,null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。

以上关于null和undefined的知识是引用的别人的内容。

2、数组类型

数组类型是js中的非常重要的一个类型,数组类型用[]表示,它的里面的对象的类别没有要求,可以一样,也可以不一样。

首先讲一下几个数组类型的基本函数:

这些函数分别是indexOf,slice,push,pop,unshift,shift,reverse,splice,concat,join,下面一一进行介绍。

indexOf,就是取出数组中的某个元素的第一个index的值

slice中文翻译为切片,它相当于string的substring函数,slice(start,end)就是将从start开始到end但不包括end的数组中的元素取出来放置在一个新的数组中进行返回。

push,就是往数组的末尾添加若干个元素,而pop则是将数组末尾的元素删除掉,这两个函数都是直接对数组本体进行操作的。

unshift则是往数组头部添加元素,而shift则是把数组中的第一个元素给删掉,这两个函数也都是对数组本体进行操作的。

reverse就是将数组进行倒置,它是直接对原来的数组进行操作,即原数组会被更改。

splice函数是万都能的,它将从索引开始,先删除几个元素,再添加几个元素。它是直接对原数组进行操作的。

concat是将一个数组和另外一个数组连接起来,形成一个新的数组并返回。注意它返回的是一个新的数组,而原来的老数组是没有变化的。

join是将数组中的每一个元素都用指定的字符连接起来,最后返回的是一个字符串,它对数组本身没有任何更改。

现在要讲一下数组类型中非常重要的几个高阶函数:

第一个函数是map,通过arr.map(callback(x))来调用,它返回的是一个新的数组,老的数组arr不变。这个map的作用是使得arr中的每一个元素都会作为参数x传入callback进行计算,然后返回的内容称为返回的新数组中的一个元素。

第二个函数是reduce,通过arr.reduce(callback(x,y))来调用,它返回的是一个值而不是一个数组。它必须传入两个参数,第一个参数是第一次使用callback函数返回的结果,第二个参数就是下一个arr元素,利用这个reduce,可以非常方便地做累加或者累乘的运算。

第三个函数是filter,就是通过arr.filter(callback(x)),它返回的也是一个新的数组。这个filter的作用是对arr中的每一个元素都进行判断,如果返回的是true,则这个元素或添加到结果中,否则就剔除。

第四个函数是sort,通过arr.sort()调用,它是直接对原理的数组进行更改。默认的排序规则按照升序排序,但是要注意有坑,那就是,sort在排序的时候,会将所有的数字转换成字符串,然后按照字符串的顺序进行排序,这就会导致10排在2的前面,因为'10'的顺序是要小于‘2’的字符串顺序的。这是一个大坑。

所以我们也可以通过arr.sort(callback(x,y))添加一个比较函数来设置自己的排序规则。其中return -1表示x<y,return 1表示x>y,return 0表示x==y。

第五个函数是every(),通过arr.every(callback(x))来使用,其中callback函数是一个判断函数,它来对arr中的函数进行判断,如果符合则返回true,否则返回false,利用every()就实现了对数组中的每一个元素都进行判断,当所有的结果都是true的时候,every函数会返回true,当有一个不是true的时候,就直接返回false,后面的判断也不再执行了。

第五个函数是some(),通过arr.some(callback(x))来使用,其中callback函数是一个判断函数,它来对arr中的函数进行判断,如果符合则返回true,否则返回false。利用some就实现了对数组中的每一个元素进行判断,当有一个结果是true的时候,就直接返回true,后面的也不再判断了。

第六个函数是find(),它用来查找数组中符合条件的第一个元素,如果找到了,就返回这个元素,否则则返回undefined。

第七个函数是findIndex(),它用来查找数组中符合条件的第一个元素,如果找到了,就返回这个元素的索引,否则则返回-1。

第八个函数是forEach(),它和map类似,但它的回调函数不返回内容,它本身也不返回任何内容,它的一个好处就是方便我们进行遍历数组。比如通过arr.forEach(console.log)就可以直接依次打印数组中的每一个元素。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值