数据类型
先前申明:以下内容为零基础笔者的学习记忆内容,其中大部分手打摘自于LINK,另外有自己整理和添加的部分。如果能够同样帮助到初学的你,也更希望能够直接去支持以上链接的作者。
Number ( 数字 )
-
不区分整数与浮点数,统一以Number表示
其中包括:
整数 //123
浮点数 //123.4
科学计数法 //1.234e3
负数// -2
NaN //Not a Number
Infinity //无限大,2/0 -
关于运算规则
可以直接进行四则运算,规则优先度与数学一致1+2; //3
(1+2)* 5/2; //7.5
2/0; //Infinity
0/0; //NaN
10%3; //1
10.5%3*5; //7.5
(求余运算与乘除优先度相同)
String ( 字符串 )
-
以单引号(‘ ’)或双引号(“ ”)括起来的任意文本,由零个或多个字符(字母,数字,标点符号或空格)构成 (若字符串内容中包括单、双引号,则使用转义字符标识)
-
转义字符转义:
\n 表换行
\t 制表符
\\ 表
\x## ASCII字符十六进制(\x41等同于‘A’)
\u#### 表Unicode字符(统一码) -
多行字符串
通常情况下多行字符由’\n’来换行连接
ES6标准新增另一种方法,即用反引号标识(`…`):` 多
行
字
符
串` -
模板字符串
通常情况下将多个字符串用 ‘ + ’ 链接:var a='A';
var b='B';
var S=a+b; //'AB'
ES6标准新增模板字符串表示方式:
var a='A';
var b='B';
var s=${A},${B};//'A,B'
-
字符串的操作
常见操作:
-
测量字符串长度
var s='Hello!!';
s.length;//8
-
获取某个指定位置的字符(类似于从数组中取某一元素,索引从0开始)
var s='Hello !';
s[0]; // 'H'
s[6]; // ' '
s[7]; // '!'
字符串不可变,若对索引赋值不会有错误,同时也不会有任何效果
var s='Hello !';
s[0]='X';
alert(s);//s[0]的值仍然为‘X’
//
alert();
为输出内容(弹出弹窗)- 以下方法不会改变字符串原有内容,而是直接返回一个新的字符串
-
toUpperCase
将一个字符串全部变为大写,仅对字母有效var s='abc123!#¥%';
s.toUpperCase();// 返回'ABC123!#¥%'
-
toLowerCase
将一个字符串全部变为小写,与前者用法相同var s='ABC123!#¥%';
s.toUpperCase();// 返回'abc123!#¥%'
-
indexOf
搜索指定字符串出现的第一个字符的索引var s='abc123!#¥%';
s.indexOf('abc');//返回 0
s.indexOf('123');//返回 3
-
substring
返回指定索引区间子串var s='abc123!#¥%';
s.substring(0,5);// 从0开始到4(左闭右开),返回'abc12'
s.substring(5);// 从索引5开始到结束,返回'3!#¥%'
-
Boolean (布尔值)
-
只有两个值,即 true、false
-
关于布尔运算
-
&& 与运算
true && true; // true
true && false; // false
true && false && true; // false -
|| 或运算
false || false; // false
false || true; // true
false || true || false; //true -
! 非运算 ( 单目运算符 )
!true; // false
! false; // true
!(2 > 5); // true
-
布尔值经常在条件判断中运用,同时其值表现为if、else的选择
(关于其及以下比较运算的优先级还有待尝试)
关于比较运算
-
比较运算符:> ,>= ,==
另外,‘ == ’可自动转换数据类型再进行比较(可能得到诡异结果)
‘ === ’比较不会转换数据类型,若不一致则直接返回‘false’
-
NaN===NaN ; // false
isNaN(NaN) ; // true (唯一的判断方式)
-
浮点数比较时使用其差的绝对值与一定阈值相比较
null & undefined
-
null表示“空”值 ;undefined表示“未定义”
-
两者相似也几乎无区分意义,大多数情况下应当使用“ null ”
-
“ null ”可以用来将对象清空
eg : var a=null ; //将a清空
- undefined 用于判断函数参数是否传递(值传递、指针传递、传递引用),当索引越界会以此填充未定义处
数组
-
是一组有序排列组合(object下的数据集合为无序),可以包含任意数据类型
-
创建数组的两种方法
-
直接使用
[ ]
包括元素来实现 ( 元素之间以“,”分隔)[ 1,2,3.14,‘hello’,null,true,undefined]
-
使用Array()函数实现
new Array(1,2,3); // 创建了数组[ 1,2,3]
-
-
数组的索引访问(起始值为0)
eg:
var arr=[1,2,3,4];
arr[0]; //返回 1
arr[1]; //返回 2
-
可以通过索引将对应的元素修改为新的值
var arr=[1,2,3,4];
arr[0]=99;
arr;//arr变为[99,2,3,4]
大多数其他编程语言不允许直接改变数组大小,而JS不会产生任何错误,故不建议直接修改其大小,保证访问索引时不会越界**(包括之后提到的直接对Array的length属性的修改)**
-
-
length
取得Array的长度var arr=[ 1,2,3.14,'hello',null,true,undefined];
arr.length;//7
-
直接给length赋新值会导致Array大小变化:
var arr=[ 1,2,3];
arr.length;//3
arr.length=6;//相当于改变arr的长度
arr;//arr变为[1,2,3,undefined,undefined,undefined]
arr.length=2;//
arr;//arr变为[1,2]
-
-
indexOf
与string类似的 用于搜索一个指定元素的位置,返回索引值var arr=[ 1,2,3.14,'hello',null,true,undefined];
arr.indexOf(1);//返回元素1的索引 0
arr.indexOf(3.14);//返回元素3.14的索引 2
arr.indexOf('hello');//返回元素hello的索引 3
arr.indexOf('1');//返回 -1,未找到元素'1'
(直接输入hello会报错)
-
slice
与string的substring()类似 用于截取Array的部分元素,然后返回一个新的Array
var arr=[1,2,3,4,5,6,7,8,9];
arr.slice(0,3);//从0开始到2(左闭右开),返回[1,2,3]
arr.slice(3);//从3开始取到最后,返回[4,5,6,7,8,9]
若不传递参数,将会截取输出所有的元素,可以由此复制一个Array:
var arr=[1,2,3,4,5,6,7,8,9];
var copy=arr.slice();
copy==arr;//false
*-
由以上代码最后一句引出关于数组之间数据是否相等(拥有相同元素的比较)
Javascript不能直接用等号来判断数组是否相等,带*号的语句无论是使用
==
或===
,输出结果都将为'false'
若要判断数组是否相同,需要将数组先转化为字符串再比较,无论使用哪种相等比较符号结果都为truevar arr=[1,2,3,4,5,6,7,8,9];
var copy=arr.slice();
arr.toString()==copy.toString();//true
arr.toString()===copy.toString();//true
若比较两个数组内元素是否完全相同 (元素顺序不一定),则先对数组进行排序再进行以上步骤
var arr1=[1,2,3,4,5,6,7,8,9];
var arr2=[1,2,3,5,4,6,7,8,9];
arr1.sort().toString()==arr2.sort().toString();//true
arr1.sort().toString()===arr2.sort().toString();//true
关于转字符串(toString)和排序(sort)之后就会提到
-
-
push和pop
push() 向Array的末尾添加若干元素,输出Array新长度
pop() 将Array的最后一个元素删除,输出删掉的元素值var arr=[1,2];
arr.push('A','B');//返回Array新长度(4)
arr;//[1,2,'A','B']
arr.pop();//返回'B'
arr;//[1,2,'A']
arr.pop();arr.pop();arr.pop();//连续pop 3次只会输出最后一个删掉的值1
arr.pop();//返回undefined
arr;//[]
-
unshift和shift
unshift() 往Array的头部添加若干元素,输出Array新长度
shift() 将Array的第一个元素删除,输出删掉的元素值var arr=[1,2];
arr.unshift('A','B');//返回Array新长度(4)
arr;//['A','B',1,2]
arr.shift();//返回'A'
arr;//['B',1,2]
//连续使用与对空数组操作同上
-
sort
对Array进行排序并直接修改其元素的位置,直接调用时按照默认排序 (按照自己指定的顺序排序需要使用函数)
var arr=['A','C','B'];
arr.sort();
arr;//['A','B','C']
-
reverse
整体反转Arrayvar arr=['one','three','two'];
arr.reverse;
arr;//['two','three','one']
-
splice
修改Array的万能方法
var arr=['A','B','C','D','E','F'];
arr.splice(2,3,'a','b');//
从索引2开始删除 3个元素,然后再添加元素‘a’,‘b’,以数组形式输出被删除的元素
arr;//['A','B','a','b','F']
/*若不删除元素,则输入'0‘
若不添加只删除,则不输入字符串*/
-
concat
将当前的Array与另一个Array(或者任意个元素与Array)连接,返回新的Array(没有修改当前的Array)var arr=[1,2,3];
var arrr=arr.concat([5,6,7],'a');
arrr;//[1,2,3,5,6,7,'a']
concat中可以直接使用数组,如:
var arrrr=arr.concat(arr);
arrrr;//[1,2,3,1,2,3]
-
join
将当前Array中所有元素用输入指定的字符串连接 (若元素不是字符串则自动转换为字符串)var arr=[1,2,3,'a'];
arr.join(+);//'1+2+3+a'
-
多维数组
某数组中的元素为Array,则该数组为多维数组var arr=[1,2,3,[111,222,333]];
关于如何索取到多维数组内部数组的值:
var arr=[1,2,3,[111,222,333]];
var x=arr[3][2];//[3]先取最外层数组中的数组元素,[2]取内层数组中的元素
console.log(x);//333
对象(object)
-
是由键-值组成的无序集合
对象的键都是字符串类型,值不限数据类型
-
对象属性的定义:
eg:
var person = {
name : 'Bob'
,
age : 20 ,
tags : ['1',2,'3‘] ,
‘has-Car’: true,
zipcode:null
};- 键值对以xxx.xxx形式申明。以
.
操作符完成对属性的访问,也可以用xxx[‘xxx’]来访问
键值对申明之间以‘,’隔开,且最后一条键值对不在末尾加‘,’
可以用对象属性来定义一个数组,但该数组无序
若属性名包含特殊字符,需将属性名以单括号括起
调用对象属性中的数组方法与普通数组调用相同,如:
person.tags[0]; // “1”
person.tags[1]; // 2
- 键值对以xxx.xxx形式申明。以
-
访问不存在的属性将返回undefined
-
JavaScript的对象为动态属性,可以自由添加删除属性
var xiaoming={name:'小明'};
xiaoming.age;//undefined
xiaoming.age=18;//增加一个age属性
delete xiaoming.age;//删除age属性
若删除一个不存在的属性不会报错//会返回true (局部测试结果)
-
检测某对象是否拥有某一属性
var xiaoming={name:'小明'};
'name' in xiaoming;//true
'age' in xiaoming;//false
'toString' in xiaoming;//true*
关于最后一句中的’toSrting’为xiaoming继承得到的属性,即该属性本不是xiaoming的。
“因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,故xiaoming也拥有该属性”
判断某属性是否为某对象自身所拥有的var xiaoming={name:'小明'};
xiaoming.hasOwnProperty('name');//true
xiaoming.hasOwnProperty('toString');//false
变量
-
变量名:由大小写英文、数字、$与 _ ,不可以数字开头,不可以JS关键字作为变量名。
申明变量,如:
var a; // a=undefined
var $b = 1;
var s_007 = '007s'; // s_007为字符串
var A = true ;
var n= null ; //n的值为“空”
进行变量申明时可以多次进行,但只能进行一次’var‘申明:
var a=123;
a='123';
(显示变量内容:console.log(x);
)
-
关于strict模式
用于修补js‘’未使用var申明的全局变量多次使用导致相互影响产生错误‘’的缺陷,在该模式下将未用var申明的变量自主强制通过var申明。
- 使用方式:‘ use strict ’ // 不支持strict的浏览器将报错‘ReferenceError’