自学JavaScript - day 1
JavaScript
自学javascript,基于 廖雪峰老师的JavaScript教程 ,记录自己的学习过程,仅供学习使用。
JavaScript代码
JavaScript代码的位置:
- 网页 :通常放在
<head>
中,例如
<html>
<head>
<script>
alert("Hello World");
</script>
</head>
<body>
...
</body>
</html>
由<script>...</script>
包含的代码就是javascript代码,可以直接被浏览器执行
- 放在.js文件中 :
<html>
<head>
<script src="/static/js/abc.js">
</script>
</head>
<body>
...
</body>
</html>
注:
可以在同一个页面中引入多个.js文件,也可以在页面多次编写<script>...</script>
代码,浏览器会按照顺序依次执行
基本语法
与java语法类似,以;
结尾
语法
赋值语句
var x=1; //声明一个整数型变量
var s='abc'; //声明一个字符串
注释
//单行注释
/*
多行注释
*/
数据类型
Number
不区分整数和浮点数
123 //整数
0.2 //浮点数
1.2e2 //科学记数法,1.2e2=1.2*10^2=120
NaN //Not a Number,无法计算结果时,如计算 0/0
Infinity //无限大,当数值超过了所能表示的最大值时,如计算 2/0
由于计算机使用二进制,所以,用十六进制表示整数更方便,十六进制用0X
前缀和0-9
、a-z
表示,如0xfa00
,0xa1b2c3d4
字符串
示例:"abc"
,'abc'
布尔
一个布尔值只有true
和false
两种
几种运算:
运算 | 名称 | 例如 | 结果为true的条件 |
---|---|---|---|
&& | 与运算 | a&&b | 所有(a和b)都为true |
|| | 或运算 | a||b | 只要有一个(a或b)为true |
! | 非运算 | !a 或 !true | a为false |
比较运算符
对任意数据类型进行比较,得到一个布尔值
1>2; //false
1<2; //true
1==1; //true
//其他类型的比较
false==0; //true
flase===0; //false
设计缺陷:2种相等比较运算符
(设计缺陷,使用===
较好)
符号 | 描述 | 结果 |
---|---|---|
== | 会自动转换数据类型再比较 | 有时结果会比较诡异 |
=== | 不会自动转换数据类型 | 数据类型不一致,返回false;数据类型一致,再进行比较 |
NaN
的比较
NaN
与其他所有值都不想等,包括他自己
NaN===NaN; //false
//唯一能判断的方法
isNaN(NaN); //true
浮点数的相等比较
浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个附带念书只能计算他们之差的绝对值,看是否小于某个阈值
1/3 === (1 - 2/3); //false
Math.abs(1/3 === (1 - 2/3))<0.0000001; //true
null
null
与0
与''
的比较
null | 0 | '' |
---|---|---|
空 | 数值‘0’ | 长度为0的字符串 |
null
与undefined
null
表示一个空的值
undefined
表示值未定义
区分两者意义不大
大多数情况使用null
仅仅在判断函数参数是否传递的情况下使用udefined
数组
数组是一组按顺序排列的集合,集合的每个值称为元素。可以包括任意数据类型。
数组的表示:
//第一种
[1,2,true,null,'abc'];
//第二种
new Array(1,2,,true,null,'abc');
数组元素的访问
通过索引来访问,索引起始值为0
var a=[1,2,true,null,'abc'];
arr[0]; //1
arr[5]; //'abc'
arr[6]; //索引超出范围,返回undefined
对象
由键-值
组成的无序集合
键:字符串(又称为对象的属性)
值:任意类型
var person={
name:'Bobby',
age:24,
tags:['rapper','handsome'],
isChinese:false,
otherInfo:null
};
/*每个键又称对象的属性
person 的 name 属性为 'Bobby'
age 属性为 24
*/
//要获取一个对象的属性,使用"对象变量.属性名"
person.name; //'Bobbby'
变量
变量在javascript中就是用变量名表示,变量名由大小写英文、数字、$
、_
组合,但是不能以数字开头,也不能是关键字
动态语言
同一个变量只能用var
声明一次,但可以给它赋不同类型的值,例如:
var a=1;
a="1";
静态语言
定义变量时必须指定变量类型,如果赋值时类型不一致,会报错,例如:
int a=1; //a是整数类型变量,类型用int申明
a='1'; //报错:不能将字符串赋给整数变量
不要把赋值语言的等号等同于数学的符号
var x=10;
x=x+2; //x=12
使用console.log(x)
显示变量的内容
strict模式
javascript设计初,并不强制使用var
声明变量,这个设计错误带来了严重的后果:如果该变量没有通过var
声明,那么该变量就会自动声明为全局变量
同一个页面的不同javascript文件都有没有用var
声明的i
,就会造成变量i
互相影响,产生难以调试的错误结果
为了修补这一错误,ECMA在后续规范中推出了strict模式,在strict模式下运行的javascript代码,强制通过var
声明变量,未使用var
就使用,将导致运行错误
启动strict模式就是在javascript的第一行加上
'use strict';
//支持strict模式的浏览器将开启strict模式运行
//不支持会把它当成一个字符串
测试(去掉''
成功报错???)