您的位置:首页 > Web前端 > JavaScript

JavaScript 读书笔记(基本语法)

2017-05-12 08:48 429 查看

注释

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


数据类型和变量

1 Number

123; // 整数123
0.456; // 浮点数0.456
1.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.5
2 / 0; // Infinity
0 / 0; // NaN
10 % 3; // 1
10.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'); // 返回7
s.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; // true
false === 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的元素,即1
arr[5]; // 返回索引为5的元素,即true
arr[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的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1
arr.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的值为undefined
var $b = 1; // 申明了变量$b,同时给$b赋值,此时$b的值为1
var s_007 = '007'; // s_007是一个字符串
var Answer = true; // Answer是一个布尔值true
var t = null; // t的值是null

赋值

var a = 123; // a的值是整数123
a = '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(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined


Set

Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, ‘三’]); // 含1, 2, 3

s1.add(4);

s2.delete('三');
//不可以s2.delete(0);delete()里面是值二不是位置


iterater
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: