详解js的六大数据类型,运算符。

目录

数据类型简介:

1.Number类型

2.String类型

3.Boolean类型

4.Null类型

5.Undefined类型

6.Object类型

运算符简介:

算数运算符:

一元运算符

逻辑运算符

赋值运算符:

关系运算符:

相等运算符:

条件运算符:

运算符优先级:


数据类型简介:

js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Null,Undefined),和一种混合数据类型(Object)。

前面说到js中变量是松散类型的,因此有时候我们需要检测变量的数据类型。

typeof操作符可以检测变量的数据类型(输出的是一个关于数据类型的字符串)。

返回如下6种字符串:number,string,boolean,object,undefined,function.且看如下例子:

var x = 1;

console.log(typeof x);//number

 

var a = undefined;

console.log(typeof a);//undefined

 

var b = null;

console.log(typeof b);//object,(null是空对象引用/或者说指针)。

 

var c = new Object();

console.log(typeof c);//object

 

var e = [1,2,3];

console.log(typeof e);//object

 

var d = function(){

 // ... 语句块

}

console.log(typeof d);//function

上面代码中,null类型进行typeof操作符后,结果是object,原因在于,null类型被当做一个空对象引用。

下面开始针对每一种数据类型单个讲解:

1.Number类型

Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。

浮点数将会自动转换为整数。

var num = 1.00;

console.log(num);//1,自动转换为整数

浮点数的最高精度是17位,看下面的例子,结果竟然不是0.3,至于其他编程语言,也会遇到这种情况(关于浮点数计算会产生舍入误差问题,其他有些编程语言也会出现类似情况。)var num1 = 0.1;

var num1 = 0.1;

var num2 = 0.2;

console.log(num1 + num2);//0.30000000000000004

NaN:非数字类型。特点:① 涉及到的 任何关于NaN的操作,都会返回NaN   ② NaN不等于自身。

var ab = "a1";

console.log(ab/10);// NaN

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

isNaN()函数,用于判断是否是一个非数字类型。如果传入的参数是一个非数字类型,那么返回true;否则返回false;

isNaN()函数,传入一个参数,函数会先将参数转换为数值。

如果参数类型为对象类型,会先调用对象的valueOf()方法, 再确定该方法返回的值是否可以转换为数值类型。如果不能,再调用对象的toString()方法,再确定返回值。

数值转换:

Number()转型函数,可以用于任何数据类型;

parseInt(),将值转换为整型,用的比较多;

parseFloat();将值转换为浮点型。

2.String类型

字符串类型中的单引号与双引号的作用效果完全一样。

字符串有length属性。可以取得字符串的长度。var str = “hello”;console.log(str.length);//5

字符串的值是不可变的。要改变一个字符串的值,首先要销毁原来的字符串,再用另一个包含新值的字符串去填充该字符串。

var lang = “java”;

lang += “script”;

上面这段代码,先创建一个能容纳10个字符的字符串,然后在这个字符串中填充java和script字符串,最后销毁原来的字符串java和scrip字符串,因为这两个字符串此时已经没用了。这个个过程是在后台发生的。

字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,defined没有toString()方法)。

var bc = "lijinwen";

var bd = null;

var be = undefined;

console.log(bc.toString());

//console.log(bd.toString());//error 报错

//console.log(be.toString());//error 报错

console.log("------");

console.log(String(bc));

console.log(String(bd));

console.log(String(be));

3.Boolean类型

该类型只有两个值,true和false

转换为boolean值: 转型函数Boolean(),将某个值转换为Boolean类型。详细内容,后面会慢慢的补充。

4.Null类型

null类型被看做空对象指针,前文说到null类型也是空的对象引用。只有一个值,即null值,所以,在你 用typeof 操作符去检测null类型的值时,结果是object类型。

如果你定义了一个变量,但是想在以后把这个变量当做一个对象来用,那么最好将该对象初始化为null值。

5.Undefined类型

只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。

var name = "lijinwen";

var age;

console.log(name);//lijinwen

console.log(age);//undefined

//console.log(height);//error,变量height没有声明

console.log(typeof name);//string

console.log(typeof age);//undefined

console.log(typeof height);//undefined,变量height没有声明

上面这段代码中,age虽然声明了,但是没有初始化值,所以,打印出来的是undefined.而变量height没有声明,故报错。

但是用typeof操作符去检测数据类型的时候,变量age没有初始化,结果是undefined,没有声明变量的height检测的类型也是undefined.

6.Object类型

js中对象是一组属性与方法的集合。具体的关于对象的创建方式以及对象的各种特性,会在后面的引用类型的章节中  做详细介绍。这里就简单介绍一下六大数据类型中的Object.

①constructor属性:构造函数属性,可确定当前对象的构造函数。

var o = new Object();

console.log(o.constructor == Object);//true

var arr = new Array();

console.log(arr.constructor == Array);//true

②hasOwnProperty(propertyName):判断属性是否存在于当前对象实例中(而不是原型对象中)。这个在后面的面向对象的章节中  有详细的讲解。

运算符简介:

                    下表按从最高到最低的优先级列出JavaScript运算符。具有相同优先级的运算符按从左至右的顺序求值。

运算符描述
. [] ()字段访问、数组下标、函数调用以及表达式分组
++ -- - ~ ! delete new typeof void一元运算符、返回数据类型、对象创建、未定义值
* / %乘法、除法、取模
+ - +加法、减法、字符串连接
<< >> >>>移位
< <= > >= instanceof小于、小于等于、大于、大于等于、instanceof
== != === !==等于、不等于、严格相等、非严格相等
&按位与
^按位异或
|按位或
&&逻辑与
||逻辑或
?:条件
= oP=赋值、运算赋值
,多重求值

 

通过运算符可以对一个或多个值进行运算,并且一定有运算结果返回

算数运算符:

算数运算符包括相加(+)、相减(-)、相乘(*)、相除(/)、取模(%)。任何值与字符串相加都会转换为字符串,做的是字符串连。除了与字符串做加法,当对非 Number 类型的值进行运算时,会将这些值转换为 Number 再运算。任何值和 NaN 做运算都得 NaN。

//js里面不区分整数和小数
var j = 123;
alert(j/1000*1000);  
//  j/1000*1000    在java里面得到结果是 0 
// 在js里面不区分整数和小数,123/1000=0.123 * 1000 = 123

//字符串的操作
var str = "456";
alert(str+1);   //在java里面操作的结果是 4561 ,在js里面还是 4561
alert(str-1);   //相减时候,执行减法的运算
//提示:NaN表示不是一个数字

 

一元运算符

正负号

//正号(+)表示正数
var a = 123;
a = +a;
console.log(a);	/123
//负号(-)表示负数
var a = 123;
a = -a;
console.log(a);	/-123

自增

自增可以使变量在原值的基础上自增1。

​ 自增使用 ++。

​ 自增可以使用 前++(++a)后++(a++)。

​ 无论是++a 还是 a++都会立即使原变量自增1

​ 不同的是++a和a++的值是不同的,++a的值是变量的新值(自增后的值), a++的值是变量的原值(自增前的值)

自减

自减可以使变量在原值的基础上自减1。

​ 自减使用 --。

​ 自减可以使用 前--(--a)后--(a--)。

​ 无论是--a 还是 a--都会立即使原变量自减1。

​ 不同的是--a和a--的值是不同的,--a的值是变量的新值(自减后的值),a--的值是变量的原值(自减前的值)

注意

 对于非 Number 类型的值会先转换为 Number 再运算。typeof 运算符可以获得一个值的类型,它会将该值的类型以字符串形式返回。

var a = 123;
var result = typeof a;
console.log(typeof result);	/string

逻辑运算符

非 !

对一个布尔值进行取反运算。如果对非布尔值进行运算,则会先转换为布尔值再取反。

与 &&

两个值只要有一个为 false 则返回 false。只有两个值都为 true 才返回 true。对于非布尔值运算,如果两个值都为 true,则返回后边的原值,如果两个值中有 false,则返回靠前的 false。归纳以上两点,如果第一个值为 true,则必然返回第二个值,如果第一个值为 false,则直接返回第一个值。

或 ||

两个值只要有一个 true,就返回 true。如果两个值都为 false,才返回 false。对于非布尔值运算,如果第一个值为 true,则直接返回第一个值,如果第一个值为 false,则直接返回第二个值。

赋值运算符:

​ (=):可以将符号右侧的值赋值给左侧变量

​ (+=):a += 5 相当于 a = a+5

​ (-=):a -= 5 相当于 a = a-5

​ (=):a * = 5 相当于 a = a5

​ (/=):a /= 5 相当于 a = a/5

​ (%=):a %= 5 相当于 a = a%5

关系运算符:

关系运算符用来比较两个值之间的大小关系的。分别有>,>=,<,<=。关系运算符的规则和数学中一致,用来比较两个值之间的关系,如果关系成立则返回true,关系不成立则返回false。如果比较的两个值是非数值,会将其转换为Number然后再比较。如果比较的两个值都是字符串,此时会比较字符串的Unicode编码,而不会转换为Number。

编码转换输出

//在字符串中使用转义字符输入 Unicode 编码,\u四位编码。
console.log("\u2620")
//在网页中使用 Unicode 编码,&#编码,这里的编码需要十进制
<h1>&#9760</h1>

相等运算符:

  1. (==)

    相等判断左右两个值是否相等,如果相等返回true,如果不等返回false。相等会自动对两个值进行类型转换,如果对不同的类型进行比较,会将其转换为相同的类型然后再比较,转换后相等它也会返回true。

  2. (!=)

    不等,判断左右两个值是否不等,如果不等则返回true,如果相等则返回false。不等也会做自动的类型转换。

  3. (===)

    全等,判断左右两个值是否全等,它和相等类似,只不过它不会进行自动的类型转换,如果两个值的类型不同,则直接返回false。

  4. (!==)

    不全等,和不等类似,但是它不会进行自动的类型转换,如果两个值的类型不同,它会直接返回true。

  5. 特殊的值

    1. null和undefined

      由于undefined衍生自null,所以null == undefined 会返回true。

2.NaN

NaN不与任何值相等,即使它自身 NaN == NaN ,也会返回false。判断一个值是否是NaN,使用isNaN()函数。

条件运算符:

语法:条件表达式?语句1:语句2;。

​ 先对条件表达式求值判断,如果判断结果为true,则执行语句1,并返回执行结果,如果判断结果为false,则执行语句2,并返回执行结果 

运算符优先级:

和数学中一样,JS中的运算符也是具有优先级的,比如 先乘除 后加减 先与 后或。具体的优先级可以参考优先级的表格,在表格中越靠上的优先级越高,优先级越高的越优先计算,优先级相同的,从左往右计算。优先级不需要记忆,如果越到拿不准的,使用()来改变优先级。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值