标准ECMAScript,JavaScript是一种实现标准。
JS可镶嵌在网页中。
方法1:放在<head>中的<script>...</script>中
<html> <head> <script>
alert('hello this is JS');
</script> </head> <body> ...</body> </html>
方法2:
放在一个.js文件中,并在html中引用
<html> <head> <script src="...path/file.js"></script>...
(2020.02.17补 上述两种方法,JS的引用都在head中,JS文件会依次解释,在解释器对head中内容完成解释之前,html页面不会被浏览器加载和显示,这种引用会出现明显的加载延迟在有些情况下。一种更好的引用方式是在<body>中页面内容的后面引用JS文件[2]。如下:
<body>
<!--html页面内容-->
<scripts type = 'text/javascript' src = 'xxx.js'></script>
</body>
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文件中的)用于在网页加载完成后立即执行的方法,通常用于<body>元素。
reference:
1