首页 > 代码库 > js自学笔记(1)

js自学笔记(1)

1.
false == 0; // true false === 0; // false

要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;

第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。

2.

JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:

i = 10; // i现在是全局变量

在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。

使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内,同名变量在不同的函数体内互不冲突。

在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。

启用strict模式的方法是在JavaScript代码的第一行写上:    

‘use strict‘;

3.

如果字符串内部既包含又包含"怎么办?可以用转义字符\来标识,比如:

‘I\‘m \"OK\"!‘;

表示的字符串内容是:I‘m "OK"!

4.

由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示:

`这是一个
多行
字符串`;

技术分享

注意:反引号在键盘的ESC下方,数字键1的左边:

 5.

要把多个字符串连接起来,可以用+号连接:

var name = ‘小明‘;
var age = 20;
var message = ‘你好, ‘ + name + ‘, 你今年‘ + age + ‘岁了!‘;
alert(message);

如果有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:

var name = ‘小明‘;
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
6.
var s = ‘Hello, world!‘;
s[0]; // ‘H‘
s[6]; // ‘ ‘
s[7]; // ‘w‘
s[12]; // ‘!‘
s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined

需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:

var s = ‘Test‘;
s[0] = ‘X‘;
alert(s); // s仍然为‘Test‘

indexOf

indexOf()会搜索指定字符串出现的位置:

var s = ‘hello, world‘;
s.indexOf(‘world‘); // 返回7
s.indexOf(‘World‘); // 没有找到指定的子串,返回-1

substring

substring()返回指定索引区间的子串:

var s = ‘hello, world‘
s.substring(0, 5); // 从索引0开始到5(不包括5),返回‘hello‘
s.substring(7); // 从索引7开始到结束,返回‘world‘
 

js自学笔记(1)