写在前面
JavaScript 是一种轻量级的弱类型、基于原型的脚本语言,非面向对象语言。主要用于为界面提供动态交互。
JavaScript编写方式分为两种:
<html>
<head>
// 第一种在<head>或<body>标签中加入<script>标签编写代码
<script>...</script>
</head>
<body>
<script>...</script>
// 第二种使用外部的JavaScript,外部编写test.js文件代码
<script src="test.js"></script>
</body>
</html>
script标签一般放在body内部的最下面,因为html中可以有多个script标签,且浏览器是顺序执行,script如果执行耗时操作将影响页面加载速度。使用引入外部文件的方式引入后内部不要再写代码,如果需要写在新加一个script标签。
1.变量声明及初始化
JavaScript中使用var关键字声明所有类型变量。
var name = 12;
var name, age, sex;
var name = "magic", age = "22", sex = "man";
变量命名规范
- 由数字、下划线、字母、$符号组成,不能以数字开头
- 遵循驼峰命名法
- 区分大小写
- 不能使用关键字
2.数据类型
JavaScript有6种基本数据类型:
- number 数字类型,用来表示整数和浮点数,浮点数值的最高精度是 17 位小数
- string 字符串类型,使用单引号或者双引号
- boolean 布尔类型,true/false
- null 空类型
- undefined 未定义,声明变量未赋值的情况下为该类型
- object 对象类型
可以通过typeof 变量名 或 typeof (变量) 查看变量的数据类型,typeof是操作符不是函数,对未初始化的变量执行 typeof 操作符会返回 undefined 值,而对未声明
的变量执行 typeof 操作符同样也会返回 undefined 值。
var a = 1;
var b; // 未赋值
var c // 未声明
var d = null;
console.log(typeof a); // number
console.log(typeof b); // undefined
console.log(typeof c); // undefined
console.log(typeof d); // object
number类型小数相加问题:
<script>
var a = 0.1;
var b = 0.2;
console.log(a + b); // 0.30000000000000004
</script>
正常预想的结果应该是0.3,但实际输出结果并非如此,至于原因可以移步js浮点数精度问题的前世今生?
NaN:
特殊的数值,这个数值用于表示一个本来要返回数值的操作数,NaN 与任何值都不相等,包括 NaN 本身。当一个未赋值的变量与一个数字进行算数操作时得到的结果为NaN。判断一个变量是不是NaN,需要使用isNaN(变量) 方法。
var a;
var b = 10;
var c = a / b;
console.log(c);// NaN
console.log(c == NaN);// false
console.log(isNaN(c));// true
3. 数据类型转换
其他类型转数字类型:
parseInt()转整型
console.log(parseInt('123'),parseInt('123.123'),parseInt('123.123a'),parseInt('a123.123'));
//123 123 123 NaN
//指定待转换字符串进制,转换为十进制,默认十进制
console.log(parseInt('123', 10)); // 123
console.log(parseInt("1010", 2)); // 10
console.log(parseInt('070', 8)); // 56
console.log(parseInt("0x70", 16));// 112
parseFloat()转浮点型
console.log(parseFloat('123'),parseFloat('123.123'),parseFloat('123.123a'),parseFloat('a123.123'));
//123 123.123 123.123 NaN
//parseFloat不支持指定进制
Nubmer()转数字
console.log(Number('123'),Number('123.123'),Number('123.123a'),Number('a123.123'));
//123 123.123 NaN NaN
通过例子可以看出,Number()转数字比parseInt()和parseFloat()更加严格,parseInt()和parseFloat()则要求首位是数字就可以转换成功。Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。
其他类型转字符串:
var a = 10;
var b = false;
var c;
console.log(a.toString());// 10
console.log(b.toString());// false
console.log(c.toString());// 报错
//指定进制
console.log(a.toString(2)); // 1010
console.log(a.toString(8)); // 12
console.log(a.toString(16));// a
console.log(String(a));// 10
console.log(String(b));// false
console.log(String(c));// undefined
console.log(a + "");// 10
console.log(b + "");// false
console.log(c + "");// undefined
其他类型转字符串有三种方法,调用 toString() 方法,使用 String() ,拼接 空字符串"",当变量未初始化的时候调用toString()会报错。
其他类型转布尔类型:
Boolen()
console.log(Boolean(-1));//true
console.log(Boolean(0));//false
console.log(Boolean(1));//true
console.log(Boolean("abc"));//true
console.log(Boolean(""));//false
console.log(Boolean(null));//false
console.log(Boolean(undefined));//false
console.log(Boolean());//false
4.运算符
运算符:
- 算数运算符 :+、-、*、/、%取余
- 一元运算符:++、-- 需要一个操作数
- 二元运算符:+、-、*、/、%取余 需要两个操作数
- 三元运算符:条件表达式?表达式1:表达式2,三元运算符需要三个操作数
- 复合运算符:+=、-=、*=、/=、%=
- 关系运算符:>、 <、 >=、 <=、 = =、 = = =、 !=、 !==
- 逻辑运算符:&&、 ||、 !
// ==、===
var a = 1;
var b = 1;
var c = "1";
console.log(a == b, a == c, a === c);
// true true false
//==比较的值大小是否相同,
//===比较的值大小是否相同,并且类型是否相同
5.函数
JS中用 function 关键字来声明函数。函数不关心参数类型参数个数,比如定义了一个函数有两个形参,调用的时候可以有3个参数或更多参数,或者没参数都不会报错。原因是 JS 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。在函数体内可以通过 arguments 对象来
访问这个参数数组,从而获取传递给函数的每一个参数。
function test(name, age) {
console.log(name, age);
console.log(arguments[0], arguments[1], arguments.length)
}
test("magic", 20);
//magic 20
//magic 20 2
test();
//undefined undefined
//undefined undefined 0
参考:JavaScript高级程序设计