Javascript数据类型与基本运算

标识符命名规则

对于变量名,键值对中的键名应满足如下要求:

  • 开头必须是字母、下划线(_)或美元符号($)
  • 除了开头以外的字符也可以是数字
  • 不可以是关键字和保留字
  • 最好不要和全局变量/函数同名,会把原有变量/函数覆盖的风险

这里,关键字就是在 js 中有特殊意义的单词,而保留字是为了以后使用预留的词语。但不要求背它们,随着学习的深入,自然就都记住了。

常见的关键字有:

break、delete、function、return、typeof、case、do、if、switch、var、catch、else、in、this、void、continue、false、instanceof、throw、while、debugger、finally、new、true、const、with、let、default、for、null、try、async 等等

常见的保留字有:

class、enum、export、extends、import 、super等等

本文可能会直接用到的有:

  • var: 定义一个变量
  • console.log(): 在浏览器控制台或后台终端输出一个值
  • alert(): 在浏览器弹窗输出一个值

基本数据类型

Javascript 基本类型包括:数值,字符串,null,undefined 和布尔型。还有 ES6 中的 Symbol 类型,这篇博客暂时先不提 Symbol 类型。

比如:

var num = 1;    //数值型
var str = 'hello world';   //字符串,双引号也可以
var flag = true;   //布尔型,取值 true 或 false
var obj = null;    //空类型
var it = undefined;   //undefined

这里简单解释一下需要注意问题:

  1. 数值类型是不区分整型与浮点型的;
  2. 数值类型默认都是以 double 浮点数形式储存的;
  3. 数值类型范围在 5e-324 至1.7976931348623157e+308,即 `Number.MIN_VALUE 至 Number.MAX_VALUE;
  4. js 没有字符类型,只有字符串类型;
  5. null 表示正常的、意料之中的空值,而 undefined 表示以外的空值。对于只声明未赋值的变量,默认值为 undefined;
  6. 数值类型有几个特殊值:
    • Infinity: 正无穷
    • -Infinity:负无穷
    • NaN:非法数值(Not a Number),但他还是个数值(好矛盾)

复杂数据类型

基本数据类型对应的对象

js 中其实除了基本类型以外其他类型的本质都是对象,就算是基本类型变量,除了 undefined 和 null 以外,都有其对应的对象类型。如下:

var num = new Number(2);
var str = new String('hello');
var flag = new Boolean(true);

这里一定要清楚,其对象类型和基本类型不是一个东西,具体的看完类型转换就一切都清楚了。

js中其他常见的对象

当然,下面继续说对象,js 常用的对象有:Array,Object,Date,RegExp等等。定义方法如下:

var arr = new Array();   //得到一个空数组
var arr2 = new Array(5);   //得到一个长度为5的数组,初值为undefined
var arr3 = new Array('b','a','c');    //得到一个长为3,对应值为'b','a','c' 的数组
var obj = new Object();   //得到一个空对象
var now = new Date();    //得到当前时间
var reg = RegExp('^[A-Za-z][\w\d]*$');   //得到一个正则表达式

对于数组、正则表达式和对象还有一种字面量的定义方法,这个方法和上面是完全等价的:

var arr = [];   //得到一个空数组
var arr3 = ['b','a','c'];    //得到一个长为3,对应值为'b','a','c' 的数组
var obj = {};   //得到一个空对象
var reg = /^[A-Za-z][\w\d]*$/;  //得到一个正则表达式
数组和对象的访问

这个部分直接举例子:

  • 数组:一些数据的集合,这里不要求数据必须是同样类型的
var arr = [1, 2, 3, 'a'];    //定义一个数组
arr[0];     //1     访问数组的第1个元素,注意索引从0开始
arr[1];     //2     访问数组的第2个元素
arr[3];     //'a'    访问数组的第4个元素
arr[-1],  arr[4],  arr[1.3];    //undefined   访问数组越界或索引不正确都返回 undefined
  • 对象: 键值对的集合,键值对之间由逗号分开,键和值由冒号分开
var obj = {
    name: 'Bob',
    age: 18,
    gender: 'M'
};
obj.name;    //'Bob'  获取 obj 对象的姓名
obj.age;    //18  获取 obj 对象的年龄
obj.gender;    //'M'  获取 obj 对象的性别

注意当键名中有符号也需要加引号。

其余的对象会在以后用到的时候再仔细讲

基本运算和运算符

运算符就像我们数学中的加减乘除,也像数学中的计算规定的先后顺序,这里我直接给出所以运算符的运算顺序和实例,必要的解释在表格后面,没有解释到的属于比较深奥的运算符,记住它的顺序即可,功能后续再理解。

优先级运算符结合性举例说明
20圆括号n/a( … ) -
19成员访问从左到右obj.name -
需计算的成员访问从左到右obj[“name”] -
new (带参数列表)n/anew Person() -
18函数调用从左到右fun(args) -
new (无参数列表)从右到左new fun -
17后置递增n/aa++相当于 a = a + 1;
后置递减n/aa–相当于 a = a - 1;
16逻辑非从右到左!a -
按位非从右到左~a -
一元加法从右到左+a -
一元减法从右到左-a -
前置递增从右到左++a -
前置递减从右到左–a -
typeof从右到左typeof 4得到值的类型 ‘number’
void从右到左void(0)执行表达式并返回 undefined
delete从右到左delete obj.age删除对象属性
15从右到左2**4得16
14乘法从左到右2 * 3得 6
除法从左到右4 / 2得 2
取模从左到右4 % 3得 1
13加法从左到右1 + 3得 4
减法从左到右2 - 3得 -1
12按位左移从左到右32 << 5得 1024
按位右移从左到右32 >> 3得 8
无符号右移从左到右-32 >>> 2得 1073741816
11小于从左到右-1 < 2得 true
小于等于从左到右-1 <= 2得 true
大于等于从左到右1 >= 2得 false
大于从左到右1 > 2得 false
in从左到右“name” in obj -
instanceof从左到右li instanceof HTMLElement -
10等号从左到右5 == ‘5’得 true
非等号从左到右5 != ‘5’得 false
全等号从左到右5 === ‘5’得 false
非全等号从左到右5 !== ‘5’得 true
9按位与从左到右10 & 40得 8
8按位异或从左到右10 ^ 40得 34
7按位或从左到右10 | 40得 42
6逻辑与从左到右0 && 3得 0,不得 false
5逻辑或从左到右0 || 3得 3,不得 true
4?:从右到左3 != 0 ? 1 : 2得 1
3赋值从右到左a = 2 -
a += 2相当于 a = a + 2
a -= 2相当于 a = a - 2
a *= 2相当于 a = a * 2
a /= 2相当于 a = a / 2
a &= 2相当于 a = a & 2
a |= 2相当于 a = a | 2
a ^= 2相当于 a = a ^ 2
a %= 2相当于 a = a % 2
a <<= 2相当于 a = a << 2
a >>= 2相当于 a = a >> 2
a >>>= 2相当于 a = a >>> 2
2yield从右到左yield returnValue; -
yield*从右到左yield* returnValue; -
1展开运算符n/aarr1.push(…arr2) -
0逗号从左到右a=1, b=2返回最后一个表达式的值 2

需要说明的是:

  1. 优先级越高的优先计算,同优先级的从左到右依次计算;
  2. a++ 与 ++a 的区别: 前者先返回值后自加,后者先自加再返回值(a– 与 –a 同理);
  3. 涉及到位运算的部分不是十分重要,但以后的文章会细谈;
  4. == 和 === 的区别,前者比较是发生自动类型转换,后者不发生自动类型转换(!= 与 !== 同理);
  5. 对于 exp ? val1 : val2; 如果 exp 的结果为 true,整个表达式得 val1, 否则得 val2;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值