一、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循环

最新文章

  1. 定时管理器框架-Task.MainForm
  2. Hibernate学习之hibernate.cfg.xml
  3. C#~异步编程再续~await与async引起的w3wp.exe崩溃
  4. EditText添加了ImageSpan后,在两者中间不能输入纯文本
  5. Django~Test View
  6. BW CUBE 数据的聚集和压缩
  7. 【Android 界面效果38】android:inputType常用取值
  8. 如何定位到append的当前位置,不用拉滚动条scrollIntoView方法
  9. JS 截取字符串函数
  10. C#_MVC3之使用Authorize简单的验证登录(一)
  11. C#面向对象的一些东西
  12. PLSQL实例(游标)
  13. Ranklib源码剖析--LambdaMart
  14. 解决Base64报错
  15. Javascript 将一个句子中的单词首字母转成大写
  16. 使用Twitter异常检测框架遇到的坑
  17. 注解(Annotation)
  18. 基于pandas python的美团某商家的评论销售(数据分析)
  19. CSS 分页实例
  20. redis优缺点

热门文章

  1. luogu1966 火柴排队
  2. 【USACO 2017Feb】 Why Did the Cow Cross the Road
  3. 计算属性 computed
  4. Vue.js 项目接口管理
  5. DNS的主从、子域授权和转发服务器
  6. E20171212-hm
  7. E20170603-hm
  8. 17年day2
  9. 清北考前刷题day4下午好
  10. 运行Tomcat 遇到的问题以及解决总结