JavaScript 读书笔记(基本语法)

来源:互联网 发布:淘宝网齐峰堂足宝粉 编辑:程序博客网 时间:2024/06/06 19:32

注释

//alert('我不想执行');/*alert('我也不想执行');*/

数据类型和变量

1 Number

123; // 整数1230.456; // 浮点数0.4561.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5-99; // 负数NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
四则运算

1 + 2; // 3(1 + 2) * 5 / 2; // 7.52 / 0; // Infinity0 / 0; // NaN10 % 3; // 110.5 % 3; // 1.5

2 字符串 (字符串是不可变的,只可以返回一个新的字符串)

'abc',"xyz"

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

alert(`多行字符串测试`);

var name = '小明';var age = 20;var message = '你好, ' + name + ', 你今年' + age + '岁了!';var message = `你好, ${name}, 你今年${age}岁了!`;alert(message);
注意:${name} ${age}  用``(ESC下面)而不是‘’

字符串操作

var s = 'Hello';var s_U = s.toUpperCase(); //大写var s_L = s.toLowerCase();//小写
s不会改变(字符串是不可变的,只可以返回一个新的字符串)

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

var s = 'hello, world';s.indexOf('world'); // 返回7s.indexOf('World'); // 没有找到指定的子串,返回-1
substring()返回指定索引区间的子串:

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



3 布尔值

true; // 这是一个true值false; // 这是一个false值2 > 1; // 这是一个true值2 >= 3; // 这是一个false值

运算

&&运算是与运算,只有所有都为true,&&运算结果才是true

||运算是或运算,只要其中有一个为true,||运算结果就是true

!运算是非运算,它是一个单目运算符,把true变成false,false变成true

比较运算符 (===)

false == 0; // truefalse === 0; // false

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。

唯一能判断NaN的方法是通过isNaN()函数:

isNaN(NaN); // true
null

null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。


4 数组

[1, 2, 3.14, 'Hello', null, true];
var arr = [1, 2, 3.14, 'Hello', null, true];arr[0]; // 返回索引为0的元素,即1arr[5]; // 返回索引为5的元素,即truearr[6]; // 索引超出了范围,返回undefined

增删改查
var arr = ['A','B','C','D'];// 增arr.splice(0,0,'首尾增加')  //在0位置删除0个数 返回的是删除的值。// 删arr.splice(0,2); //0位置开始删除2个值// 改arr[0]='改';arr.splice(-1,1,'splice改末尾');// 查arr[0];arr[arr.length-1]; //末尾 不可直接arr[-1]// 造型数组var arr = ['A','B','C','D','E'];arr.slice(); //复制整个数组arr.slice(0,3); //复制 0 1 2 位置的数arr.slice(3,-1); //复制位置3 到倒数第二位数arr.slice(3); //复制3到末尾全部
长度 length

var arr = [1, 2, 3.14, 'Hello', null, true];arr.length; // 6
请注意,直接给Array的length赋一个新的值会导致Array大小的变化:


var arr = ['A', 'B', 'C'];arr[1] = 99;arr; // arr现在变为['A', 99, 'C']

索引位置 indexOf

var arr = [10, 20, '30', 'xyz'];arr.indexOf(10); // 元素10的索引为0arr.indexOf(20); // 元素20的索引为1arr.indexOf(30); // 元素30没有找到,返回-1arr.indexOf('30'); // 元素'30'的索引为2

sort 排序

var arr = ['B', 'C', 'A'];arr.sort();arr; // ['A', 'B', 'C']


翻转  reverse

var arr = ['one', 'two', 'three'];arr.reverse(); arr; // ['three', 'two', 'one']


删除数组里若干个并替换新值 splice

// 从索引2开始删除3个元素,然后再添加两个元素:arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']

当前的Array和另一个Array连接起来,并返回一个新的Array  concat
join
var arr = ['A', 'B', 'C', 1, 2, 3];arr.join('-'); // 'A-B-C-1-2-3'


5 对象

创   JavaScript的对象是一组由键-值组成的无序集合

var person = {    name: 'Bob',    age: 20,    tags: ['js', 'web', 'mobile'],    city: 'Beijing',    hasCar: true,    zipcode: null};
person.scholl = '中山大学';person['school_2'] = '华南理工';
delete person.school; // 删除school属性person.school_2 = ''; //删除值
改 

xiaoming.age = 18;

取  要获取一个对象的属性,我们用对象变量.属性名的方式:

person.name; // 'Bob'person.zipcode; // null


是否存在 in判断

'name' in person; // true'school_3' in person; // false
不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的



6 变量

var a; // 申明了变量a,此时a的值为undefinedvar $b = 1; // 申明了变量$b,同时给$b赋值,此时$b的值为1var s_007 = '007'; // s_007是一个字符串var Answer = true; // Answer是一个布尔值truevar t = null; // t的值是null
赋值
var a = 123; // a的值是整数123a = 'ABC'; // a变为字符串
strict模式
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:
强制 var
启用strict模式的方法是在JavaScript代码的第一行写上:
'use strict';


7条件判断

 if () { ... } else { ... }
var age = 20;if (age >= 18) {     alert('adult');} else {     alert('teenager');}如果if else 下只有一句语句 可以省略为:var age = 20;if (age >= 18)    alert('adult');else    alert('teenager');
var age = 3;if (age >= 18) {    alert('adult');} else if (age >= 6) {    alert('teenager');} else {    alert('kid');}

for 循环
var x = 0;var i;for (i=1; i<=10000; i++) {    x = x + i;}x; // 50005000

for in 循环
var o = {    name: 'Jack',    age: 20,    city: 'Beijing'};for (var key in o) {    alert(key); // 'name', 'age', 'city'}
var a = ['A', 'B', 'C'];for (var i in a) {    alert(i); // '0', '1', '2'    alert(a[i]); // 'A', 'B', 'C'}
for ... of 
var a = ['A', 'B', 'C'];a.name = 'Hello';for (var x of a) {    alert(x); // 'A', 'B', 'C'}
forEach
var s = new Set(['A', 'B', 'C']);s.forEach(function (element, sameElement, set) {    alert(element);});


do ... while 循环
var n = 0;do {    n = n + 1;} while (n < 100);n; // 100

Map
直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);m.get('Michael'); // 95
var m = new Map(); // 空Mapm.set('Adam', 67); // 添加新的key-valuem.set('Bob', 59);m.has('Adam'); // 是否存在key 'Adam': truem.get('Adam'); // 67m.delete('Adam'); // 删除key 'Adam'm.get('Adam'); // undefined

Set
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
var s1 = new Set(); // 空Setvar s2 = new Set([1, 2, ‘三’]); // 含1, 2, 3
 s1.add(4);
s2.delete('三');//不可以s2.delete(0);delete()里面是值二不是位置
iterater





0 0