注意:本篇学习笔记摘录于原网站: JavaScript教程 - 廖雪峰的官方网站
笔记仅作学习留档使用
本篇目录
比较运算符
BigInt
变量
strict模式
字符串
多行字符串
模板字符串
操作字符串
比较运算符
JavaScript允许对任意数据类型做比较:- false == 0; // true
- false === 0; // false
复制代码 比较方式对比:
- ==:自动转换数据类型后再比较(容易产生意外结果)
- ===:严格比较,数据类型不一致直接返回 false
建议始终使用 === 进行比较。
另一些特殊值的比较:- //`NAN`这个特殊的Number与所有其他值都不相等,包括它自己:
- NaN === NaN; // false
- isNaN(NaN); // true - 正确判断方法
- //浮点数
- 1 / 3 === (1 - 2 / 3); // false
- //计算它们之差的绝对值,看是否小于某个阈值
- Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true - 正确比较方式
复制代码 BigInt
JavaScript的Number不区分整数和浮点数,并且JavaScript的整数最大范围不是±2(63),而是±2(53)。BigInt类型可以精确表示比更大的整数,在整数后加一个n,例如9223372036854775808n,或使用BigInt()把Number和字符串转换成BigInt。可以正常进行加减乘除等运算,结果仍然是一个BigInt,但不能把一个BigInt和一个Number放在一起运算::- // 创建 BigInt
- const bi1 = 9223372036854775807n;
- const bi2 = BigInt(12345);
- const bi3 = BigInt("0x7fffffffffffffff");
- // 比较
- console.log(bi1 === bi3); // true
- // 正常运算
- console.log(1234567n + 3456789n);
- console.log(1234567n / 789n); // 1564n(结果仍为 BigInt)
- // 类型混合错误
- console.log(1234567n + 3456789); // 会显示Uncaught TypeError: Cannot mix BigInt and other types
复制代码 变量
变量在JavaScript中就是用一个变量名表示,变量名是大小写英文、数字、$和_的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如if、while等。申明一个变量用var语句,比如:- var a; // 申明了变量a,此时a的值为undefined
- var $b = 1; // 申明了变量$b,同时给$b赋值,此时$b的值为1
- var s_007 = '007'; // s_007是一个字符串
- var Answer = true; // Answer是一个布尔值true
- var t = null; // t的值是null
- // let 声明(现代推荐)
- let name = '小明';
复制代码 变量名也可以用中文,但是,请不要给自己找麻烦。
在JavaScript中,使用等号=对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var申明一次,例如:- var a = 123; // a的值是整数123
- a = 'ABC'; // a变为字符串
- // 变量输出
- console.log(x); // 推荐:控制台输出
- alert(x); // 不推荐:弹窗干扰
复制代码 strict模式
如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。
使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内(函数的概念将稍后讲解),同名变量在不同的函数体内互不冲突。在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。启用strict模式的方法是在JavaScript代码的第一行写上:- 'use strict';
- //不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。
复制代码 字符串
是用''或""括起来的字符表示。如果'本身也是一个字符,那就可以用""括起来;如果字符串内部既包含'又包含"就用转义字符\来标识,比如:- 'I\'m "OK"!'; // I'm "OK"!
复制代码 转义字符\可以转义很多字符:- //`\n`表示换行
- //`\t`表示制表符
- `\\`; //字符`\`本身也要转义,所以`\\`表示的字符就是`\`。
- //ASCII字符以`\x##`形式的十六进制表示
- '\x41'; // 完全等同于 'A'
- //用`\u####`表示一个Unicode字符:
- '\u4e2d\u6587'; // 完全等同于 '中文'
复制代码 多行字符串
多行字符串用\n写起来比较费事,有一种多行字符串的表示方法(ES6标准新增),用反引号...表示:反引号在键盘的ESC下方,数字键1的左边:- ┌─────┐ ┌─────┬─────┬─────┬─────┐
- │ ESC │ │ F1 │ F2 │ F3 │ F4 │
- └─────┘ └─────┴─────┴─────┴─────┘
- ┌─────┬─────┬─────┬─────┬─────┐
- │ ~ │ ! │ @ │ # │ $ │
- │ ` │ 1 │ 2 │ 3 │ 4 │
- └─────┴─────┴─────┴─────┴─────┘
复制代码 模板字符串
要把多个字符串连接起来,可以用+号连接:- let name = '小明';
- let age = 20;
- let message = '你好, ' + name + ', 你今年' + age + '岁了!';
- alert(message);//显示:你好, 小明, 你今年20岁了!
复制代码 (ES6新增)或者一种模板字符串,它会自动替换字符串中的变量:- let name = '小明';
- let age = 20;
- let message = `你好, ${name}, 你今年${age}岁了!`;
- alert(message);
复制代码 操作字符串
要获取字符串某个指定位置的字符,使用下标操作,索引号从0开始;字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:- let s = 'Hello, world!';
- s[0]; // 'H'
- s[6]; // ' '
- s[7]; // 'w'
- s[12]; // '!'
- s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined
- let s = 'Test';
- s[0] = 'X';
- console.log(s); // s仍然为'Test'
复制代码 改变字符串有一些常用方法,单调用这些方法本身——不会改变原有字符串的内容,而是返回一个新字符串:- //1.toUpperCase():字符串全部变为大写
- let s = 'Hello';
- s.toUpperCase(); // 返回'HELLO'
- //2.toLowerCase():字符串全部变为小写
- let s = 'Hello';
- let lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower
- lower; // 'hello'
- //3.indexOf():搜索指定字符串出现的位置
- let s = 'hello, world';
- s.indexOf('world'); // 返回7
- s.indexOf('World'); // 没有找到指定的子串,返回-1
- //4.substring():返回指定索引区间的子串
- let s = 'hello, world'
- s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
- s.substring(7); // 从索引7开始到结束,返回'world'
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |