javaScript--进阶1--数据类型、操作符

一、JS基础知识背景

1.1 弱类型脚本语言

脚本语言是:弥补编译语言的不足而存在的,作为补充语言,不用编译,解析一行执行一行
弱类型语言:简单理解定义一个变量,可以有多种数据类型。(var temp)

1.2 组成

这里写图片描述

ECMAScript(前身为欧洲计算机制造商协会):JavaScript的语法规范,它是JS语言的标准,规定了JS的编程语法和基础核心知识
DOM(Document Object Model 的简称):文档对象模型,提供给JS很多操作页面中元素的属性和方法。JavaScript有操作网页上元素的API
BOM(Browser Object Model 的简称):浏览器对象模型 ,提供了很多操作浏览器 的属性方法,而这些方法都存放在window浏览器对象上。JavaScript有操作浏览器部分功能的API

1.3 输出语句

1.3.1 Alert() 弹出警示框

完整的写法 : window.alert(“执行语句”);
简单写法:Alert(“123”);
Window 对象是窗口,一般情况是可以省略的。 关于window对象后面讲。

1.3.2 Console 控制台输出

一般用于测试用。 因为在console中显示,一般用户不会发现。
这里写图片描述

使用代码作用
console.log() 控制台输出,普通输出语句
console.warn() 控制台警示
console.error(); 错误提示

这里写图片描述

1.3.3 document.write() 文档打印输出

通过document.write()向文档书写内容,直接在文档中显示。

1.4 Js 的书写位置

Js 的书写位置非常的自由。

1.4.1 内嵌式

<script type=”text/javascript”> </script> 可以写在任何一个地方,但是因为JavaScript的执行顺序是按照在HTML文件中出现的顺序依次执行,如果需要在HTML文件执行函数或者全局变量,最好将其放在HTML的头部中。

1.4.2 外链式

这对标记之间不能写任何的东西。
这里写图片描述

1.4.3 行内式

作为某个元素的事件属性值或者是超链接的href属性值,直接在属性值中写js代码。

<head>
    <script>
        function fun(){
            alert(1121313);
        }
    </script>
</head>
<body>
    <div style="color:red;">123</div>//这是css的行内式
    <button onclick="alert('你好吗')">点击我</button>
    <button onclick="fun();">欢迎</button>
</body>
<a href=”javascript:;”></a>
<a href=”javascript:void(0);”></a>

二、数据类型

Javascript的数据类型按大类分为:简单数据类型(值类型)、复杂数据类型(引用类型)
包括5种简单的数据类型,与一种较为复杂的数据类型。

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.
通过typeof关键字,对这5种数据类型会返回下面的值(以字符串形式显示)

类型typeof的结果
boolean Boolean
string String
number Number
object/null Object
undefined Undefined

需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用。

2.1 简单数据类型(值类型)

2.1.1 数值型(number)

该类型的表示方法有两种形式,第一种是整数,第二种为浮点数

整数可以通过十进制,八进制,十六进制的字面值来表示。

var intNum=55;//十进制
var octalNum=070;//八进制数,第一位必须是0,解析为56
var octalNum=079;//无效的8进制数,9超过了8进制数的范围,解析为79
var hexNum=0xA;//十六进制数,前两位必须是0x,后跟16进制数字(09及AF)

浮点数
1、该数值中必须包含一个小数点,且小数点后必须有一位数字,如果小数点后只有零,则该小数会被转化为整数。
2、浮点数所占据的内存空间是整数的两倍。
3、对极大极小的浮点数采用e表示法。

var floatNum=3.2e7//3.2×10(7次幂)
var floatNum=3.2e-7//3.2×10(-7次幂)

特殊值:

  • NaN

NaN代表Not a Number当一个Undefined表达式的结果为数值型数据时,该数值型就是NaN值
NaN是唯一一个不能和自身做比较的值

1、即非数值,是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数,未返回数值的情况。比如任何数值除以0,本是不符合规范的,js里,这样的操作返回NaN(但是实际上,只有0除以0时返回NaN,其他则无穷值)。
2、NaN有两个不同寻常的特点:任何涉及NaN的操作都会返回NaN,NaN值与任何值都不相等,包括本身
3、isNaN()函数,这个函数可以判断,传递的参数是否“不是数值”,这里涉及数值转换的问题,(后面具体写)例如“10”这个字符串就可以转换为10,但是“blue”这个字符串则无法转换为数字,所以isNaN(“blue”)==true

  • Infinity无穷大
当一个数值或数值表达式的值超出了可表示的最大值的范围,将被赋值为Infinity。可以有无穷大Infinity,也可以有无穷小-Infinity,JavaScript中的数值包含整数和浮点数,所有数值都以双精度浮点型来表示。
双精度浮点数可以表示-2的53次方到2的53次方的整数,也可以表示为正负1.7976的10的308次方的最大值和正负2.2250乘以10的-308次方的浮点数如1.79e309和-1.79e309。

2.1.2 字符型 (string)

字符串类型是最熟悉不过的啦,至于用单引号,还是双引号,在js中还是没有差别的。记得成对出现。
var firstName=’zakas’;
字符串中一些特殊的字面量,即转义序列。
如果两个变量都是字符串,实现拼接,只要在前一个后面添加后一个字符串。(+与-情况不同,详情参考数据转换)
toString()函数,每个值都有,但是null与undefined没有。一般情况下使用这个函数时,没有必要传递参数,但是调用数值的 toString()方法时,可以传递基数,默认传递的是10,代表十进制。
String()函数可以将任何类型的值转换为字符串,包括null转换为’null’、undefined转换为’undefined’。

2.1.3 boolean

即布尔类型,该类型有两个值:true false
Bloolean()函数,可以将其他类型的值转换为布尔类型
转换规则

这里写图片描述

2.1.4 null

null类型的默认值是null,是表示一个空对象引用。
js高级程序上有讲到,undefined类型是派生自null的,

console.log(undefined == null); //true

这里写图片描述不严格的说二者都是指没有明确赋值的类型,但是细分之后,undefined类型,被用来形容未经初始化的变量,null类型被用来形容空对象引用。
null表示空值,表示什么都没有,相当于一个占位符。
null和undefined的区别就是undefined表示变量未被赋值,而null表示变量被赋予了一个空值

所以,如果定义的变量准备在将来用于保存对象(即复杂的数据类型object),那么就该将该变量初始化为null
当一个变量声明后,未初始化,则该值为undefined,如果这个值是为了保存对象,则修改其默认初始化的值,改为null。 所以当检测其类型时,会显示类型为object。

var car=null;
console.log('car的类型为:'+typeof car)

这里写图片描述

2.1.5 undefined

在使用var声明变量,但未对其加以初始化时,这个变量的类型就是undefined,且其默认初始化值为undefined。
对未声明与初始化的变量,直接使用,那么这个变量的类型也是undefined,但是没有默认初始化值,直接输出报错。

var message;
console.log('已经声明但未初始化的变量message的类型是:' +typeof message)
console.log("试着输出已经声明但未初始化的变量message的值是"+message)
console.log('未声明,也未初始化的变量age的类型是:'+ typeof age )
console.log("试着输出既没有声明也没有初始化的age"+age)//无法输出,报错

这里写图片描述

2.2 复杂数据类型(引用类型)

2.2.1 object

该类型实例化的对象,是一组数据和功能(函数)的集合。
实例化对象的过程有两种,一种是通过new操作符,一种是通过对象字面量表示法。
object类型是最基本的类型,我们可以在其基础上继承出更多的类型,像我们知道的Array()、Date()、还有有意思的function()类型,都是从object继承的,而且这些类型都在程序员使用前被默认设置了属性和方法,供程序员调用。
而以上类型又有一个笼统的称呼为引用类型。为什么是引用类型呢?

var obj=new Object();

在学习C的时候,知道“ int a; int &ra=a;”,所以ra是a的引用,ra的类型为引用类型,系统并不为引用类型分配内存空间。
但是,js所指的引用类型,在《js高级程序设计》这本书里,也确实是这样的概念,obj只是引用类型,是堆内存中一个对象的别称,本身并不占用内存。

这里写图片描述

三、 数据类型转换

在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。
有三个函数可以显示地把非数值转换为数值:Number(),parseInt(),parseFloat()。第一个可以用于任何数据类型,后两个,则专门用于把字符串转化为数值。这三个函数对于同样的输入有不同的效果。

3.1 - 显示转换

转数字
(1)Number转换:

var a = “123;
a = Number(a);
console.log(typeof a);

这里写图片描述

注意:
1. 如果转换的内容本身就是一个数值类型的字符串,那么将来在转换的时候会返回自己。
2 .如果转换的内容本身不是一个数值类型的字符串,那么在转换的时候结果是NaN.
3 .如果要转换的内容是空的字符串,那以转换的结果是0.

这里写图片描述
(2)parseInt():

 var a = “123;
 a = parseInt(a);

注意:
a) 忽略字符串前面的空格,直至找到第一个非空字符,还会将数字后面的非数字的字符串去掉。
b) 如果第一个字符不是数字符号或者负号,返回NaN
c) 会将小数取整。(向下取整)

这里写图片描述
(3)parseFloat();//浮点数(小数)

与parseInt一样,唯一区别是parseFloat可以保留小数。
这里写图片描述
转字符串
可以将其它的数据类型转成字符串。
(1)String():

var a = 123;
a = String(a);
console.log(typeof a+" "+a)

这里写图片描述
(2)toString()的方法来进行转换(包装类)。

var a = 123; 
a = a.toString();
//undefined,null不能用toString。

这里写图片描述
转boolean类型:

可以将其它类型转为boolean值:

(1)Boolean():

代码:

 var a =”true;
 a = Boolean(a);

注意:在进行boolean转换的时候所有的内容在转换以后结果都是true,除了:false、”“(空字符串)、0、NaN、undefined。

3.2 - 隐式转换

转number:

var a = “123;
a = +a;

加减乘除以及最余都可以让字符串隐式转换成number.

转string:

var a = 123;
a = a + “”;

转boolean:
!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false;

对null与undefined等其他用隐式转换的值,用!操作符时都会产生true的结果,所以用两个感叹号的作用就在于将这些值转换为“等价”的布尔值;

var a = 123;
a = !!a;
console.log(typeof a+" "+a);

这里写图片描述

四、操作符

4.1 操作符种类

一、算数运算符(+—*/…)
a) 一元运算符:正号、负号、++、–、平方等一个变量就能运算
b) 二元运算符:+-*/%等两个变量才能运算
c) 三元运算符: 值1?值2:值3;
二、逻辑运算符( ||&& ! )(或且非)
三、比较运算符(<、>、==、>=…)
四、赋值运算符(=、+=、-=、*=、/=、%=)

4.2 优先级

1 ()
2 !、-(负数)、++、– (正数省略+)(一元运算)
3 *、/、%
4 +、- (加,减)(二元运算)
5 <、<=、<、>= (一级逻辑运算)
6 ==、!=、===、!==、 (二级逻辑运算)
7 && (三级级逻辑运算)
8 ||
9?: (三元运算)
10 =、+=、-=、*=、/=、%= (赋值运算)

4.3 &&和||运算

与java类似

&&链接两个boolean类型,有一个是false结果就是false。
链接值不是布尔类型时,按照成布尔类型计算,结果本身不变。(非布尔)
例子: 1 = 2&&1; 0 = 0 && 1; 都是true取后面,都是false取前面。
||链接两个boolean类型,有一个是true结果就是true。
链接值不是布尔类型时,按照成布尔类型计算,结果本身不变。(非布尔)
例子: 2= 2||1; 1 = 0 || 1; 都是true取前面,都是false取后面。

五、 流程控制

1、顺序结构(程序正常执行流程从上往下,从左往右)(不用研究)
  赋值运算时为从右往左执行,且左侧为属性或变量,不取值!!!
2、选择结构
  a) If语句
  b) Switch语句
3、循环结构
  a) for循环
  b) while循环
  c) do…while循环

原文地址:https://www.cnblogs.com/sunqiangstyle/p/10312305.html