参考教程,廖雪峰
数据类型
Number
js不区分整数合浮点数,统一使用Number。
NaN:表示Not a Number ,无法使用Number计算时用NaN。
Infinity:表示无限大,当数值超过Number所能表示的最大值时使用。
比较运算符==和===
==,会自动转换数据类型。
===,不会转换数据类型,数据类型不一样,返回false。类型一样时,再比较数值。
NaN与其他所有值都不相等,包括自身。
判断NaN的方法通过isNaN()函数:isNaN(NaN);
浮点型的比较
由于计算机无法准确地表示无限循环的小数,所以比较两个浮点型数据大小,只能比较两个值的差值绝对值是否小于某个阈值。
1/3 === (1 - 2/3); //false
Math.abs(1/3 - (1 - 2/3)) < 0.000001; //true
null和undefined
null:表示空,undefined:表示未定义
两者区分不大,一般只在判断函数参数是否传递的情况下用undefinded。
数组
var array = [1, 2, 3, 'js', true, null];
数组表示按顺序排列的集合,和Java不同,js的数组可以包含任意数据类型。
还可以使用
new Array(1, 2,3);
对象
js对象是一组键-值队的无序集合
var person = {
name:'Royal',
age:25,
phone:1110120110,
school:null
};
strict模式
js申明变量使用var关键字。若不使用var,则是全局变量。
全局变量在同一个页面的不同js文件中会相互影响。
ECMA为此推出了strict模式,该模式下强制使用var声明变量。
使用strict模式时,在js代码前加上一句:
'use strict';
多行字符串
由于多行字符串用 \n
写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用* ... *
表示:
alert(
`多行
字符串
测试`
);
多个字符串连接
可以同java一样,使用+连接
ES6新增了一种模板字符串,使用${ var },它会自动替换字符串中的变量:
var name = 'Js';
var age = 20;
alert(`Hello,${name},age = ${age}`);
数组
JS的数组可以动态改变数组的大小,java数组的大小在初始化时确定后,不能调整。
使用数组的length属性,可以获取数组的大小。
直接给length赋值可以改变数组的大小。
var array = [1,2,3,4,5];
array.length; //length为5
array.length = 10; //length变为10
通过索引可以给数组赋值,如果索引超过数组的大小范围,也会改变数组的大小。
var array = [1,2,3];
array[1] = 20;//[1,20,3]
array[4] = 100; // [1,20,3,undefined,100]
Array和String都可以通过indexOf()来搜索一个指定的元素的位置
var str = "this is a string";
str.indexOf('str');//返回10
str.indexOf('royal');//没有,返回-1
var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1
arr.indexOf('30'); // 元素'30'的索引为2
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array.
均是左闭右开。
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
若不传递参数,则从开始截取到结束,conger复制这个数组。
var,let和const
var申明的变量的作用域是函数级的。
let申明的变量的作用域是块级的。
const申明的变量的作用域是块级的的常量。