Python JavaScript day1
JavaScript(一种浏览器的编程语言)
1.存在形式
1.跟CSS一样,可以导入文件来使用
2.也可以写在开头 用<script></script>包括起来
3.但是最好还是放在body的最后面,否则如果放在前面而JavaScript的操作又非常费时,就会使
页面一直在加载而看不到body的内容
4.里面有许多习惯跟单片机差不多,记得写完一个句子加;
2.变量
var a = 123; 局部变量
a = 123; 全局变量
PS:可以每次写变量的时候都用局部变量,当需要全局变量的时候再改过来,避免出错
3.数据类型
1.数字:JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值来表示
转换:
parseInt() 将某值转换成数字,不成功则NaN
parseFloat() 将某值转换成浮点数,不成功则NaN
特殊值:
NaN,非数字,可以使用isNaN(num)来判断
Infinity,无穷大,可以使用isFinite(num)来判断
2.字符串:
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。
1 obj.length 长度 2 obj.trim() 移除空白 3 obj.trimLeft() 4 obj.trimRight) 5 obj.charAt(n) 返回字符串中的第n个字符 6 obj.concat(value, ...) 拼接 7 obj.indexOf(substring,start) 返回子序列位置(从前往后) 8 obj.lastIndexOf(substring,start) 返回子序列位置(从后往前) 9 obj.substring(from, to) 根据索引获取子序列(感觉和切片差不多) 10 obj.slice(start, end) 切片 11 obj.toLowerCase() 大写 12 obj.toUpperCase() 小写 13 obj.split(delimiter, limit) 分割 14 obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效) 15 obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。 16 obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项, 17 $数字:匹配的第n个组内容; 18 $&:当前匹配的内容; 19 $`:位于匹配子串左侧的文本; 20 $':位于匹配子串右侧的文本 21 $$:直接量$符号
3.布尔类型:
首字母是小写:a = true
== 等于
!= 不等于
=== 比的时候类型相等
!== 比的时候类型不相等
|| 或
&& 且
比如: a = '123' b = 123; a == b 是true , 只比较值的大小,不考虑类型 a === b 就是false, 值和类型都要相同
4.数组:
类似于Python的列表,可以使用 a=[]; 来创建数组
1 obj.length 数组的大小 2 obj.push(ele) 尾部追加元素 3 obj.pop() 尾部获取一个元素 4 obj.unshift(ele) 头部插入元素 5 obj.shift() 头部移除元素 6 obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素 7 obj.splice(n,0,val) 指定位置插入元素,n代表位置,val代表插入的元素,0固定 8 obj.splice(n,1,val) 指定位置替换元素 9 obj.splice(n,1) 指定位置删除元素 10 obj.slice( ) 切片 11 obj.reverse( ) 反转 12 obj.join(sep) 将数组元素连接起来以构建一个字符串 13 obj.concat(val,..) 连接数组 14 obj.sort( ) 对数组元素进行排序
4.其他:
转义:
encodeURL(url); 把URL后面的的中文,括号等转换成浏览器可以识别的东西 decodeURL(url); encodeURIComponent(); 把URL里的所有东西转换,包括//:之类的 decodeURLComponent(); escape(); 对字符串进行转义 unescape(); 解码
eval:
5.时间处理
a = new Date;直接创建一个本时区的对线,可以用get来获得想要的值,用set来设置值
6.正则表达式:
7.语句:
1.if
if(条件){} else if(条件){} else{}
2.switch
switch(name){ case '1': age = 123; break ; case '1': age = 456; break ; default : age = 789; }
3.循环:
1.while(条件){}
2.for(var i=0;i<10;i++){} 根据条件循环(不能处理字典)
3.for(var i in li){} 把li里东西的索引取出(可以处理字典,因为取出来的是KEY)
4.异常处理:
try{} catch(var){} 如果try抛出异常就执行这个语句,可以输入var变量 finally{} 无论如何都会执行 throw new Error('xxx') 主动创建一个错误
8.函数:
普通函数:
function f1(){}
匿名函数:
setInterval(function(){alert(1)},1000);
自执行函数:
(function (arg) {alert(arg)})(123) 自己会执行函数的函数
9.作用域:
1.没有块级作用域,但是有let
比如:
1 while(1){ 2 let let1 = 2; 3 var var1 = 2; 4 } 5 alert(let1); //不可访问 6 alert(var1); //可以访问
2.采用函数作用域:函数外面的无法访问函数里面的变量
function main(){var a = 'a'} main(); console.log(a)//报错
3.作用域链
xo = 'one'; function f1() { var xo = 'two'; function f2() { var xo = 'three' console.log(xo); } f2(); } f1(); 输出 three
执行console.log(xo);时会一层一层地往外找xo,如果有就输出,没有就继续往外找
4.作用域链在执行前就已经创建了
例1
xo = 'one'; function f1() { var xo = 'two'; function f2() { console.log(xo); } return f2; } //var ret = f1(); //ret();
虽然没有调用f1,但是已经创建了作用域,且作用域f1中创建了var xo;但是值为undefined,
当执行时,f1 创建了var xo = 'two', var ret=f1{},而f1返回的是f2,f2的ox就要从里面往往外需找,在上一层找到var xo='two',所以ret的值是two。
例2
xo = 'one'; function f1() { var xo = 'two'; function f2() { console.log(xo); } xo = 'three' ; //这里是对var xo 的重新赋值,不是创建全局变量xo,以为上面已经创建了var xo了 return f2; } var ret = f1(); ret(); 作用域一层一层,所以ret的值是three
例3
<script> xo = 'one'; function f1() { console.log(xo); } function f2() { var xo = 'two'; return f1; } var ret = f2(); ret(); </script> 这样相当于ret 是f1,从f1的作用域开始往外找,所以ret就是 one