JavaScript基础-数据类型

js数据类型

ECMAScript变量包含两种不同类型的值:基本类型和引用类型

  • 基本类型:指的就是保存在栈内存中的简单数据段.
  • 引用类型:指的是那些保存在堆内存中的对象,换句话说,就是变量名实际上是一个指针,而这个指针指向的位置,就是保存对象的位置.

两种不同的访问方式:

  • 基本类型:按值访问,操作的是它们实际的值.
  • 引用类型:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后按照指针所指向的地方,找到堆内存里面的值

基本类型

基本数据类型:number,string,boolean,null,undefined基本类型的访问是按值访问的,就是说你可以操作保存在变量中的实际的值.

特点:

  1. 基本类型的值是不可变的
  2. 基本类型的比较是值的比较
  3. 基本类型的变量是放在栈区的

number

NaN的特点

  1. 任何涉及NaN的操作都会返回NaN
  2. NaN与任何值都不相等

ECMAScript定义了isNaN()函数,该函数会帮助我们确定这个参数是否"不是数值".

数值转换

3种方法将非数值的值转换为数值:number(),parseInt和parseFloat().

Number()函数的转换规则如下:

  1. 如果是Boolean值,true和false将分别转换成1和0.
  2. 如果是数字值,只是简单的传入和返回。
  3. 如果是null值,返回0.
  4. 如果是undefined,返回NaN.
  5. 如果是字符串,遵循下列规则

a.如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”会变成1,“123”会变成123,而“011”会变成11(注意:前导的零被忽略了)

b.如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样,也会忽略前导零); c.如果字符串中包含有效的十六进制格式,例如:“0xf”,则将其转换为相同大小的十进制整数数; d.如果字符串是空的(不包含任何字符),则将其转换为0;e.如果字符串中包含除上述格式之外的字符,则将其转换为NaN.

  1. 如果是对象则调用对象的valueOf()方法,然后依照前面的规则转换返回的值.如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值.

parseInt (cString)从字符串cString非空字符开始转换得到的整数,遇到小数点或其他0-9外的字符就停止,如“-1234a”,“-1234.0”都将返回 -1234;如果除第一个符号外一个0-9字符都不是,将返回NaN,如“-a”、“abc”等

parseFloat支持第一个非空字符为小数点,如parseFloat(".123" )返回0.123。空字符串或完全空格串健壮的parseFloat()返回NaN,而Number()返回0,这有点让人费解。除了不支持无前导0小数(如.123、-.123)和支持多余的前导0(如-00123返回-123)多少不符合常规外,Number能用来验证数字串!

string

字符串可以存储一系列字符,如 "John Doe".
字符串可以是插入到引号中的任何字符.你可以使用单引号或双引号.

字符串的常用方法

方法 描述
chartAt() 返回指定索引位置的字符
charCodeAt 返回指定索引位置Unicode值
contact 连接两个或多个字符串,返回连接后的字符串
IndexOf 返回字符串中检索指定字符第一次出现的位置
lastIndexOf 返回字符串中检索指定字符串最后一次出现的位置
match 找到一个或多个正则表达式匹配
repalce 替换与正则表达式匹配的子串
search 检索与正则表达式匹配的值
slice 提取字符串的片段,并在新的字符串返回提取的部分
split 把字符串分割为字符串数组
substr 从起始索引号提取字符串中指定的字符
substring 提取字符串两个指定的索引号之间的字符
toLowerCase 把字符串转为小写
toUpperCase 把字符串转为小写
trim 移除字符首尾空白
toString 返回字符串首尾空白
valueOf 返回某个字符串对象的原始值

boolean

boolean类型是javascript中使用最多的一种类型.2个值:true和false.与数字值不是一回事,true不一定等于1,false不一定等于0. 所有类型的值都有这两个Boolean值等价的关系的值。可以调用转化函数 Boolean().如下所示:

各类数据及对应的转换规则

数据类型 转换为true的值 转为false的值
boolean true false
string 任何非空字符串 ""(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
object 任何对象 null
undefined n/a undefined

undefined

表示缺少值,就是此处应该有一个值,但未定义.

  1. 变量被声明了,但没有赋值时,就等于undefined
  2. 调用函数时,应该提供的参数没有提供,该参数等undefined.
  3. 对象没有赋值的属性,该属性的值为undefined。
    函数没有返回值时,默认返回undefined.

Null(undefined和null之间的区别)

null值表示一个对象空指针.typeof null返回object. null和undfined之间的相等操作符(==)总返回true.

引用类型

javascript中除了上面的基本类型(number,string,boolean,null,undefined)之外就是引用类型了,也可以说是就是对象了.对象是属性和方法的集合.

  1. 引用类型的值是可变的,可为为引用类型添加属性和方法,也可以删除其属性和方法
  2. 引用类型的值是同时保存在栈内存和堆内存中的对象
  3. 引用类型的比较是引用的比较

引用类型和传统的面向对象程序设计中的类相似,但实现不同.

  1. Object是一个基础类型,其他所有类型都是从Object继承基本的行为.
  2. Array类型是一组值的有序列表,同事还提供了操作和转换这些值的功能.
  3. Date类型提供有关日期和时间信息,包括当前日期和时间已经相关的计算功能.
  4. RegExp类型是支持正则表达式的.
  5. function,函数实际上是Function类型的实例,因此函数也是对象,函数也拥有方法,可以来增强其行为.

Object

两种创建方式

//new操作后面跟Object构造函数
var person=new Object();//var person={}等价
person.name="Nicholas";
person.name=29;
//对象表面量表示法
var person={
    name:"Nicholas",
    age:"29"
}

Array类型

两种创建方式

使用Array构造函数
//创建length为20的数组
var color=new Array(20)//var color=Array()等价
//穿建包含3个字符串值得数组
var color=new Array("red","blue","green");

使用数组字面量表示法
var color=["red","blue","green"];
color[0]="red";
var name=[];

数组的常用方法

  • push:向数组的末尾增加一项,返回数组的新长度
  • unshift:向数组开头增加一项,返回数组的新长度
  • pop:删除数组的末尾项,返回值是数组的删除的数组项
  • shift:删除数组开头项,返回被删除的开头项目
  • splice:删除数组的任意项,返回值是被删除的数组项
  • slice:复制数组,返回值是复制到的新数组
  • contact:把一个数组和另一个数组拼接在一起,回拼接好的数组
  • join:把数组的每一项按照指定的分隔符拼成字符串
  • reverse:倒叙数组,返回值倒叙数组原有数组改变
  • sort:跟据匿名函数进行冒泡排序
  • indexOf:返回获取项在数组的索引
  • lastIndexOf:返回获取项在数组中出现的最后一次索引
  • ForEach:循环遍历数组,参数是一个匿名函数,默认返回undefined
  • map:循环遍历数组,参数是一个匿名函数
var c=ary.push(1);//在数组的末尾增加一项
    var d=ary.unshift(3);//在数组的开头增加一项
    var e=ary.pop();//在数组的末尾删除一项
    var f=ary.shift();//在数组的开头删除一项
    var g=ary.slice(2,5);//复制数组
    var h=ary.concat(ary1,ary2).concat(1,2,2,2,2,[456654]); //如果没有参数 或者参数为()空则为赋值数组
    var i=ary.join('+');//将数组中的每一项用指定的分隔符拼接成一个新的字符串
    var j=ary.reverse();//倒序排序  原有数组改变
    var k=ary1.sort(function(a,b){return b-a;});
    var l=ary2.indexOf(4);//返回获取项在数组中出现的索引
    var m=ary2.lastIndexOf(4);//返回获取项在数组中出现的最后一次索引
    var n=ary2.indexOf(9);//若获取项不存在则返回-1
    var o=ary.forEach(function(a,b){console.log(a,b)});
    var p=ary2.map(function(){});
    console.log(a);//[3,4,5] 
    ary=[1,2,5,6,7,8,9,0]
    console.log(b);//[5]
    ary=[1,2,6,7,8,9,0]
    console.log(c);//8
    ary=[1,2,6,7,8,9,0,1]
    console.log(d);//9
    ary=[3,1,2,6,7,8,9,0,1]
    console.log(e);//1
    ary=[3,1,2,6,7,8,9,0]
    console.log(f);//3
    ary=[1,2,5,6,7,8,9,0]
    console.log(g);//[6,7,8]
    console.log(h);//ary=[3,1,2,5,6,7,8,9,0]
    console.log(i);//1+2+6+7+8+9+0
    console.log(j);//[0,9,8,7,6,2,1]
    ary=[0,9,8,7,6,2,1]
    console.log(k);//[7,5,4,1]
    console.log(l);//2
    console.log(m);//6
    console.log(n);//-1
//    console.log(a,xb);
    console.log(o);//undefined
    console.log(ary);//[0,9,8,7,6,2,1]
    console.log(ary1);//[7,5,4,1]

Date()函数

  • 创建Date()对象的语法
  • var myDate=new Date()
new Date("month dd,yyyy hh:mm:ss");
new Date("month dd,yyyy");
new Date(yyyy,mth,dd,hh,mm,ss);
new Date(yyyy,mth,dd);
new Date(ms);
参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数。各种函数的含义如下:
month:用英文表示月份名称,从January到December
mth:用整数表示月份,从0-11(1月到12月)
dd:表示一个月中的第几天,从1到31
yyyy:四位数表示的年份
hh:小时数,从0(午夜)到23(晚11点)
mm:分钟数,从0到59的整数
ss:秒数,从0到59的整数
ms:毫秒数,为大于等于0的整数
如:
new Date("January 12,2006 22:19:35")
new Date("January 12,2006")
new Date(2006,0,12,22,19,35)
new Date(2006,0,12)
new Date(1137075575000)

Function类型

在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他而且都与其他引用类型一样具有属性和方法.由于函 数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定.函数通常是使用函 数声明语法定义的,如下面的例子所示.

function sum (num1, num2) {
return num1 + num2;
}
这与下面使用函数表达式定义函数的方式几乎相差无几。
var sum = function(num1, num2){
return num1 + num2;
}; 

Js中同名函数的覆盖

在Js中函数是没有重载,定义相同函数名、不同参数签名的函数,后面的函数会覆盖前面的函数.调用时,只会调用后面的函数.

var n1 = 1;
 
function add(value1) {
    return n1 + 1;
}
alert(add(n1));//调用的是下面的函数,输出:3
 
function add(value1, value2) {
    return value1 + 2;
}
alert(add(n1));//输出:3

函数申明和函数表达式

  • 解析器会率先读取函数申明
  • 函数声明必须有标符,也就是常说的函数名。函数表达式可以省略函数名 函数声明(要带标识符)
function functionName(arg1, arg2, ...){
    <!-- function body -->
}

函数表达式

省略标识符:

var  variable=function(arg1, arg2, ...){
        <!-- function body -->
}
带有标识符:

var  variable=function functionName(arg1, arg2, ...){
        <!-- function body -->
}
原文地址:https://www.cnblogs.com/guyanv/p/8877439.html