周报 第七期

这周在看 《Javascript 高级程序设计》小红书。

JS

基本语法

js是区分大小写的
每个语句 ; 隔开,语句块用{...};语句块具有缩进,通常是4个空格。

注释

///* */

字符串

  • length
var s =  'Hello world'
s.length   // 11  
s[1]         // "e"    要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始:

JavaScript为字符串提供了一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串

  • toUpperCase()

把字符串全部变成大写

var s = 'hello wrold';
undefined
s.toUpperCase();
// "HELLO WROLD"
  • toLowerCase()

把字符串全部变成小写

  • indexOf()
    返回下标缩影值, 找不到返回 -1
var s = 'hello wrold';
undefined
s.indexOf('wrold')
6
s.indexOf('h')
0
s.indexOf('m')
-1

  • substring()
    返回指定索引区间的子串
var s = 'hello wrold';
undefined
s.substring(0,5)   //从索引0开始到5(不包括5),返回'hello'
"hello"
s.substring(6)  // 从索引6开始到结束,返回'world'
"wrold"

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

var s = 'hello wrold';
undefined
s[0] = 'H';
"H"
console.log(s)   // hello wrold
  • split()
    把一个字符串分割成一个字符串数组
var test = '2019-09-07';
undefined
test.split('-')
["2019", "09", "07"]

数组

和字符串一样 返回数组的长度,如果给 length 属性赋值,数组也会因此发生变化

var arr = [1, 2, 3.14, 'Hello', null, true];
undefined
arr.length //6
arr.length = 8

console.log(arr)
//  [1, 2, 3.14, "Hello", null, true, empty × 2]

arr.length = 2;
console.log(arr)
//  [1, 2]

数组可以通过索引把对应的元素修改为新的值,如果通过索引赋值时,索引超过了范围会引起数组的变化:

var arr = ['A', 'B', 'C'];
arr[0] = 99
console.log(arr)
//  [99, "B", "C"]
arr[5] = 88
console.log(arr)
// [99, "B", "C", empty × 2, 88]

indexOf()

和字符串一样 通过元素来寻找对应的索引

slice()

截取数组的部分元素,返回一个新的数组

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var a = arr.slice(0,3) // 从索引0开始,到索引3结束但不包括索引3
var b = arr.slice(3)   // 从索引3开始到结束且包括索引3
console.log(arr)
//  ["A", "B", "C", "D", "E", "F", "G"]
console.log(a)
// ["A", "B", "C"]
undefined
console.log(b)
// ["D", "E", "F", "G"]

push() 和 pop()

push()向数组的末尾添加若干元素,pop()则把数组的最后一个元素删除掉

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
undefined
arr.push('v')
console.log(arr)
//   ["A", "B", "C", "D", "E", "F", "G", "v"]
undefined
arr.pop()
console.log(arr)
// ["A", "B", "C", "D", "E", "F", "G"]

unshift() 和 shift()

往数组的头部添加若干元素,使用unshift()方法,shift()方法则把数组的第一个元素删掉

var arr = [1, 2];
arr.unshift(3,4,5)
5
console.log(arr)
//  [3, 4, 5, 1, 2]
arr.shift()
3
console.log(arr)
// [4, 5, 1, 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()

修改Array的“万能方法”可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat()

可以接收任意个元素和数组且自动把数组拆开然后全部添加到新的数组里,不改变原来数组,返回一个新的数组

var arr = ['A', 'B', 'C'];
var s = arr.concat('d')
console.log(arr)
// ["A", "B", "C"]
console.log(s)
// ["A", "B", "C", "d"]
var b = arr.concat([1,2,3,4])
console.log(b)
// ["A", "B", "C", 1, 2, 3, 4]

join()

把当前数组的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

var arr = ['A', 'B', 'C', 1, 2, 3];
var s = arr.join()
console.log(arr)
// ["A", "B", "C", 1, 2, 3]
console.log(s)
// A,B,C,1,2,3
typeof(s)
"string"

对象

JS的对象是一种无序的集合数据类型,它由若干键值对组成。JavaScript用一个 {...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型,访问一个不存在的属性会返回什么呢?JavaScript规定,访问不存在的属性不报错,而是返回undefined

  • 属性
    访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名如果属性名包含特殊字符,就必须用''括起来:
var xiaohong = {
    name: '小红',
    'middle-school': 'No.1 Middle School'
};
xiaohong.middle-school //报错

xiaohong.name
"小红"
xiaohong['middle-school']
"No.1 Middle School"

可以给对象添加属性和删除属性

var xiaohong = {
    name: '小红',
    };
xiaohong.age = 18;
18
console.log(xiaohong)
//  {name: "小红", age: 18}

delete xiaohong.name // 删除属性

console.log(xiaohong)
//  {age: 18}

检测对象有没有某种属性

var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};
'name' in xiaoming
  true
'sex' in xiaoming
  false
name in xiaoming
  false

如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的
xiaohong的属性名middle-school不是一个有效的变量,就需要用''括起来。访问这个属性也无法使用.操作符,必须用['xxx']来访问,因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法

var xiaoming = {
    name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
'toString' in xiaoming; // true
  • 有效变量名

条件判断

js 用 if () { ... } else { ... } 来进行条件判断

var age = 20;
if (age >= 18) { // 如果age >= 18为true,则执行if语句块
    alert('adult');
} else { // 否则执行else语句块
    alert('teenager');
}
  • 多行条件判断
    如果还要更细致地判断条件,可以使用多个 if...else... 的组合
var age = 3;
if (age >= 18) {
    alert('adult');
} else if (age >= 6) {
    alert('teenager');
} else {
    alert('kid');
}

循环

JavaScript的循环有两种,一种是for循环 一种是for ... in循环

浏览器内核

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335