JavaScript 学习笔记 since 2020.02.11

标准ECMAScript,JavaScript是一种实现标准。

JS可镶嵌在网页中

方法1:放在中的

...

方法2:

放在一个.js文件中,并在html中引用

...

(2020.02.17补 上述两种方法,JS的引用都在head中,JS文件会依次解释,在解释器对head中内容完成解释之前,html页面不会被浏览器加载和显示,这种引用会出现明显的加载延迟在有些情况下。一种更好的引用方式是在中页面内容的后面引用JS文件[2]。如下:

JS可写在html中,但是建议写成外部文件调用js,可以提高可维护性,亦可缓存以提高加载速度。

)

语法与Java相似,每个语句用“;”结尾,但并不严格,浏览器会在没有";"结尾的语句中自动加入,为便于阅读,建议加入。

赋值 var x = 1; //如果一个变量没有用var声明就使用,则成为全局变量;但如果在.js文件头加入字符'use strict',则在变量初始化时如未使用var,会出现

{}部分注意换行时的缩进;

注释的方式//, /*...*/;

严格区分大小写;

动态语言:类型不固定,而静态语言如Java,在初始化时需要指定类型名,并且修改值时只能在同类型值中修改。

判断两个值是否相同,使用'===',而非'=='。前者比较数据时如果类型不同则返回false,只比较同类型数据,而后者比较时会先转换类型再做比较。注意:坚决使用'==='比较数据,不使用'=='

逻辑运算:与&&  或|| 非!

数字类型不区分float和int,NaN/Infinity也是数字。注意NaN与自身的比较也会返回false,NaN === NaN返回false。十六进制: 0x...

空值是null,未定义是undefined。

JS的字典称作对象,定义形式与python相同,引用方式dict_name.feature。

字符串:特殊符号,比如",在字符中显示时需要加\,如\",换行\n等等。

字符串拼接 >>

var a = 1; var b = 'ext';

var c = a+ b + 'asdf'

字符串c的自带方法, .length(), .toUpperCase(), .toLowerCase(), .substring(start_index, end_index = last_ele), .indexOf(...返回..的首index)

数组array:

元素可修改,通过a[index] = ...的方式修改,类比Python的list。

数组定义完成了如果赋值的index超过了数组长度,则数组自动延长,没定义的indices都被定义为undefined.

a.indexOf(x)返回数组中元素x的index。

a.slice(s, e): 类似于字符串的substring功能,注意end index是e-1,这点与Python相同。

push/pop分别是向尾部添加元素和葱尾部删除元素。

unshift/shift分别是向头部添加元素和从头部删除元素。

splice(si, number, ...)是指定一个初始位置si,其后的number个元素被后面的...替换。如果不指定替换元素,则删除前面指定位置的元素。

concat([..])相当于拼接。

用符号拼接,a.join('-')

条件判断 if () {} else {}:

如果执行语句只有一条,可以去掉{},但是建议不管执行语句多少条都加{}.并不以自动缩进作为语句的语法。每条指令的结束加';',这个';'要加在{}以内。条件语句中的并列条件中间用&&而非Python中的and。

没有':'只有';'在else之前。

循环:

for (初始条件; 终止条件; 变化)  {;}  类似于C++

for ... in ...循环的表达

var ad = {key1: 1, key2: 2};

for (var x in ad) {console.log(x);} 其中的x是ad的key

var aa = ['1','asdf',2']

for (var x in aa) {console.log(x); console.log(aa[x]);}其中的x返回数组的index

for (var x of aa) {console.log(x);}x是数组中的元素。

while(条件) {执行语句; 变化;}

do {执行语句; 变化;} while (条件);

JavaScript有行末自动添加分号的机制

JS函数:

形式1

function fn(x,y) { 执行语句; return ans;}

形式2(匿名函数形式)

var fn = function(x,y) { 执行语句; return ans;};

JS的函数引入一个关键字arguments,在函数内部不需要定义arguments,它代表了函数传入的所有变量,可以当做一个数组。如arguments.length返回传入参数个数。

2020.02.13

函数中变量的作用域:

在函数中定义变量时加var可使其成为局部变量。

JS扫描函数体,在一个函数内,只要一个变量被声明,不管是在调用前后,变量都被"提升",也就是后声明不会报错。但如果调用在声明前,返回undefined,即变量声明被提升,但变量赋值不会提升。建议用一个var在函数开始声明所有变量,形式如

var x=1, y = 2, z = 3;

注意其中标点符号使用。

不在函数内定义的变量都是全局变量,全局变量的调用,可以直接调用变量名,也可以通过调用JS默认的全局对象windows的以变量名为名的属性。如下

'use strict'

var x = 1;

alert(window.x);

函数也是全局对象的一种属性,直接调用函数名和通过window.函数名()方式调用的效果相同。

为避免定义的函数与window namespace中的变量/函数重名,可在程序开始定义一个字典,用以保存自定义的变量和函数,对变量和函数的定义都是字典的一个key。

解析赋值

一个数组的元素赋给不同的变量

var [x, [y, z]] = [1,[2,3]]

(对象中的)方法:

对象(即字典)中不仅可以保存变量,也可以保存函数。形如

var aob = { birth: 99,

age : function () { var x = this.birth - 1;

return x;}

};

age函数中的this.birth引用了aob对象中的变量birth,this类似于python类中的self.


2020.02.14

window.onload()方法(插入在html文件中的)用于在网页加载完成后立即执行的方法,通常用于元素。


reference:

1

2 https://www.jianshu.com/p/10197543d14e

你可能感兴趣的:(JavaScript 学习笔记 since 2020.02.11)