JavaScript的输出输出方式
输入: prompt
// 弹出一个输入框
prompt(“请输入您的姓名:”);
输出: alert
<script> // 弹出一个输出框 alert("hello"); </script>
1
2
3
4
弹出一个警示对话框, 输出结果
输出: console.log
在控制台打印一个日志(供程序员看)
// 向控制台输出日志
console.log(“这是一条日志”);
基本数据类型
JS 中内置的几种类型
number: 数字. 不区分整数和小数.
boolean: true 真, false 假.
string: 字符串类型.
undefined: 只有唯一的值 undefined. 表示未定义的值.
null: 只有唯一的值 null. 表示空值.
number 数字类型
JS 中不区分整数和浮点数, 统一都使用 “数字类型” 来表示. 0,-1,123,…小数,复数,
var a = 1;
var a = 07; // 八进制整数, 以 0 开头
var b = 0xa; // 十六进制整数, 以 0x 开头
var c = 0b10; // 二进制整数, 以 0b 开头
1
2
3
4
一个八进制数字对应三个二进制数字
一个十六进制数字对应四个二进制数字. (两个十六进制数字就是一个字节)
特殊的数字值
Infinity: 无穷大, 大于任何数字. 表示数字已经超过了 JS 能表示的范围.
-Infinity: 负无穷大, 小于任何数字. 表示数字已经超过了 JS 能表示的范围.
NaN,表示Not a Number不是一个数字,但是属于Number类型。
var max = Number.MAX_VALUE;
// 得到 Infinity
console.log(max * 2);
// 得到 -Infinity
console.log(-max * 2);
// 得到 NaN
console.log(‘hehe’ - 10);
1
2
3
4
5
6
7
注意:
负无穷大 和 无穷小 不是一回事. 无穷小指无限趋近与 0, 值为 1 / Infinity
‘hehe’ + 10 得到的不是 NaN, 而是 ‘hehe10’, 会把数字隐式转成字符串, 再进行字符串拼接.
可以使用 isNaN 函数判定是不是一个非数字
string字符串
基本规则
字符串字面值需要使用引号引起来, 单引号双引号均可
var a = “haha”;
var b = ‘hehe’;
var c = hehe; // 运行出错
1
2
3
当字符串本身存在引号
var msg = “My name is “zhangsan””; // 出错
var msg = “My name is “zhangsan””; // 正确, 使用转义字符. " 来表示字符串内部的引号.
var msg = “My name is ‘zhangsan’”; // 正确, 搭配使用单双引号
var msg = ‘My name is “zhangsan”’; // 正确, 搭配使用单双引号
1
2
3
4
一些转义字符
有些字符不方便直接输入, 于是要通过一些特殊方式来表示.
\n
’
"
\t
创建字符串对象的方式
第一种:var s=“sag”;(小String,属于String类型)
第二种:var a2= new String(“ab”);(大String,属于Object类型)
boolean
在boolean类型中有一个Boolean()函数,会将非boolean类型,转换成boolean类型。
当某个地方一定是boolean类型时,会自动转换成boolean类型。例如if后面的括号。
NaN,0,“”,null,undefined会自动转换成false.
console.log(true + 1);
console.log(false + 1)
1
2
这样的操作其实是不科学的. 实际开发中不应该这么写.
undefined 未定义数据类型
如果一个变量没有被初始化过, 结果就是 undefined, 是 undefined 类型
var a;
console.log(a)
1
2
undefined 和字符串进行相加, 结果进行字符串拼接
console.log(a + “10”); // undefined10
1
undefined 和数字进行相加, 结果为 NaN
console.log(a + 10);
1
null 空值类型
null 表示当前的变量是一个 “空值”.
var b = null;
console.log(b + 10); // 10
console.log(b + “10”); // null10
1
2
3
注意:
null 和 undefined 都表示取值非法的情况, 但是侧重点不同.
null 表示当前的值为空. (相当于有一个空的盒子)
undefined 表示当前的变量未定义. (相当于连盒子都没有)
关于相等的细节
undefined == null 得到true
undefined === null 得到false
NaN 不等于任何数据,包括它自己
NaN == NaN 永远都是false
那么如何判断是否为NaN?isNaN(数据)如果是NaN得到true 否则得到false
JS中的和=的比较
是自带类型转换的比较
=是不带自带类型的比较
0"0"//true
0=“0”//false
1
2
0==“0”,因为两个要比较的数据类型不等,所以先对其中一个做类型提升(这里把0->“0”)
0===“0” 不做类型提升。两个比较的类型不同,所以结果就是false
一般建议使用===和!==去做比较,不会出现一些内在逻辑错误
其他的运算符和条件判断符的用法跟Java是差不多的
数组
创建数组
使用 new 关键字创建
// Array 的 A 要大写
var arr = new Array();
1
2
使用字面量方式创建 [常用]
var arr = [];
var arr2 = [1, 2, ‘haha’, false]; // 数组中保存的内容称为 “元素”
1
2
数据列表可以写任意个数据,如果多个数据用逗号隔开
数组跟变量一样,数组中的元素也是无类型的((本质是一个引用类型)),所有数组可以保存任意的类型的元素,数组中放数组也可以
注意: JS 的数组不要求元素是相同类型.
这一点和 C, C++, Java 等静态类型的语言差别很大. 但是 Python, PHP 等动态类型语言也是如此.
获取数组元素
使用下标的方式访问数组元素(从 0 开始)
var arr = [‘小猪佩奇’, ‘小猪乔治’, ‘小羊苏西’];
console.log(arr);
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
arr[2] = ‘小猫凯迪’;
console.log(arr);
1
2
3
4
5
6
7
如果下标超出范围读取元素, 则结果为 undefined
console.log(arr[3]); // undefined
console.log(arr[-1]); // undefined
1
2
非法下标不会报错,但是会显示如果是读取值会获得undefined,如果是修改操作,那么会产生空洞数据
注意: 不要给数组名直接赋值, 此时数组中的所有元素都没了.
var arr = [‘小猪佩奇’, ‘小猪乔治’, ‘小羊苏西’];
arr = ‘小猫凯迪’;
1
2
新增数组元素
通过修改 length 新增
相当于在末尾新增元素. 新增的元素默认值为 undefined
var arr = [9, 5, 2, 7];
arr.length = 6;
console.log(arr);
console.log(arr[4], arr[5]);
1
2
3
4
通过下标新增
如果下标超出范围赋值元素, 则会给指定位置插入新元素
var arr = [];
arr[2] = 10;
console.log(arr)
1
2
3
此时这个数组的 [0] 和 [1] 都是 undefined
使用push()新增
在数组末尾添加元素
也可以一次性添加多个,用逗号隔开
返回值是新长度
var arr = [9, 5, 2, 7, 3, 6, 8];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
newArr.push(arr[i]);
}
}
console.log(newArr);
1
2
3
4
5
6
7
8
unshift()
在数组第一个位置添加元素
也可以一次性添加多个,用逗号隔开
返回值是新长度
删除数组中的元素
使用 splice 方法删除元素
var arr = [9, 5, 2, 7];
// 第一个参数表示从下表为 2 的位置开始删除. 第二个参数表示要删除的元素个数是 1 个
arr.splice(2, 1);
console.log(arr);
// 结果
[9, 5, 7]
1
2
3
4
5
6
使用pop()方法删除元素
删除数组末尾的元素(一次只能删一个)
返回值就是被删除的元素
使用shift()方法删除元素
删除数组的第一个元素
返回值是被删除的元素