31 May 18 Javascript语法基础 BOM

# 图片太多,详细见link 以及文本

31 May 18

一、今日面试及知识点回顾

1、%和format的区别?

Python中字符串的格式化(%、format),你一般用哪种?为什么?

  1. 简单的用%,超过两个值一般都用format

https://www.cnblogs.com/liwenzhou/p/8570701.html

定义一个敌人的坐标

c = (250, 250)

利用%进行字符串格式化

print("向他开炮:%s" % c)  # 报错not all arguments converted during string formatting

print("向他开炮:%s" % (c, ))  # 向他开炮:(250, 250)

用format进行字符串的格式化

print("向他开炮:{}".format(c))  # 向他开炮:(250, 250)

在python3.6中加入的f-strings新特性

format的常见用法

通过位置

l1 = ["Egon", 18]

s = "{} is {} years old.".format(l1[0], l1[1])  # Egon is 18 years old.

s = "{} is {} years old.".format(*l1)  # Egon is 18 years old.

print(s)

通过关键字

d1 = {"name": "Egon", "age": 18}

s = "{name} is {age} years old.".format(**d1)  # Egon is 18 years old.

print(s)

通过对象属性

class Person():

   def __init__(self, name, age):

       self.name = name

       self.age = age

   def __str__(self):

       return "{self.name} - {self.age}".format(self=self)

p1 = Person("Egon", 18)  # Egon - 18

print(p1)

通过下标

l1 = ["Egon", 18]

s = "{} is {} years old. {} 不要脸。".format(l1[0], l1[1], l1[0]) # Egon is 18 years old. Egon 不要脸。

s = "{0} is {1} years old. {0} 不要脸。".format(l1[0], l1[1])  # Egon is 18 years old. Egon 不要脸。

s = "{0[0]} is {0[1]} years old. {0[0]} 不要脸。".format(l1)  # Egon is 18 years old. Egon 不要脸。

print(s)

填充与对齐

print("egon".center(20, "*"))  # 居中********egon********

print("{:>10}".format("egon"))  # 右对齐 共10       egon

print("{:0>10}".format("egon"))  # 右对齐 共10 用0填充000000egon

print("{:*>10}".format("egon"))  # 右对齐 共10 用*填充******egon

print("{:*^10}".format("egon"))  # 居中 共10 用*填充***egon***

print("{:*<10}".format("egon"))  # 左对齐 共10 用*填充egon******

print("egon".zfill(18))  # 默认右对齐 共18 用0填充00000000000000egon

精度与类型f

print("{:.2f}".format(3.141592653))  # 两位小数3.14

其他进制

print("{:b}".format(10))  # 二进制1010

print("{:d}".format(10))  # 十进制10

print("{:o}".format(10))  # 八进制12

print("{:x}".format(10))  # 十六进制a

千位分隔符

print("{:,}".format(1000000))  # 用,每三位分隔1,000,000

2、python中json序列化相关操作

import json

# 序列化 python对象-> JSON格式的字符串

d = {"name": "Egon", "age": 18}

ret = json.dumps(d)

print(ret, type(ret))  # {"name": "Egon", "age": 18} <class 'str'>

# 反序列化JSON格式的字符串-> Python对象

p_str = '{"name": "Egon", "age": 18}'

d2 = json.loads(p_str)  # {'name': 'Egon', 'age': 18} <class 'dict'>

print(d2, type(d2))

3、正则表达式复习

https://q1mi.github.io/PythonBlog/post/about_re/

二、上节课知识补充(sort)

关于sort()需要注意:

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数a 和b,其返回值如下:

若a 小于b,在排序后的数组中a 应该出现在b 之前,则返回一个小于0 的值。

若a 等于b,则返回0。

若a 大于b,则返回一个大于0 的值。

三、词法分析

JavaScript中在调用函数的那一瞬间,会先进行词法分析。

词法分析的过程:

当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:

1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。

2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。

3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。

函数内部无论是使用参数还是使用局部变量都到AO上找。

四、自定义对象(类似python中的字典)

JavaScript的Object本质上是键值对的集合(Hash结构),但是只能用字符串作为键,如果没有输入字符串,会将输入转化成字符串,如下。

当已知key时,可用以下两种方式将对应数值取出

var a = {"name": "Alex", "age": 18};

console.log(a.name);

console.log(a["age"]);

遍历对象中的内容

var a = {"name": "Alex", "age": 18};

for (var i in a){

 console.log(i, a[i]);  # 不能用a.i,只能用a[i]

}

五、Date对象(重要)

创建Date对象

# 注意: 月份是0-11

Date对象的办法

// 编写JS文件,将当前日期按“2017-12-27 11:11 星期三”格式输出。

const WEEKMAP = {

   0: "星期日",

   1: "星期一",

   2: "星期二",

   3: "星期三",

   4: "星期四",

   5: "星期五",

   6: "星期六",

};

function showTime() {

   var d1 = new Date();

   var year = d1.getFullYear();

    var month = d1.getMonth() + 1;

   var day = d1.getDate();

   var hour = d1.getHours();

    var minute = d1.getMinutes() < 10 ? "0"+d1.getMinutes() :d1.getMinutes();

   var week = WEEKMAP[d1.getDay()]; // 0~6的星期

    var dateStr = `

        ${year}-${month}-${day} ${hour}:${minute} ${week}

    `;

   console.log(dateStr)

   alert (date)

}

showTime();

六、Json对象(重要)

1. JSON.parse()     字符串-> JS对象

2. JSON.stringify()   JS对象-> 字符串

七、RegExp对象(重要)

Python正则表达式相关:https://q1mi.github.io/PythonBlog/post/about_re/

1. 两种方式

1. var reg1 = new RegExp('[a-zA-Z][a-zA-Z0-9]{5,11}')

  #一位字母+5-11位字母或数字

2. var reg2 = /[a-zA-Z][a-zA-Z0-9]{5,11}/

RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false

2. 三个坑

1. 不要加空格

  1. 全局模式g不要乱用

// 注意事项1:

// 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。

// 该属性值默认为0,所以第一次仍然是从字符串的开头查找。

// 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。

// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。

// 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为0。

// 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为0。

3. test()不传值相当于传undefined,会按照'undefined'处理

String对象与正则结合的4个方法

var s2 = "hello world";

s2.match(/o/g);   // ["o", "o"]          查找字符串中 符合正则 的内容

s2.search(/h/g);   // 0                查找字符串中符合正则表达式的内容位置

s2.split(/o/g);     // ["hell", " w", "rld"]  按照正则表达式对字符串进行切割

s2.replace(/o/g, "s"); // "hells wsrld"    对字符串按照正则进行替换

# g: 全局匹配i:不区分大小写

八、Math

abs(x)     返回数的绝对值。

exp(x)     返回e 的指数。

floor(x)   对数进行下舍入。

log(x)     返回数的自然对数(底为e)。

max(x,y)   返回x 和y 中的最高值。

min(x,y)   返回x 和y 中的最低值。

pow(x,y)   返回x 的y 次幂。

random()   返回0 ~ 1 之间的随机数。

round(x)   把数四舍五入为最接近的整数。

sin(x)     返回数的正弦。

sqrt(x)    返回数的平方根。

tan(x)     返回角的正切。

九、BOM(Browser Object Model)

http://www.cnblogs.com/liwenzhou/p/8011504.html

BOM为浏览器对象模型,它使JavaScript 有能力与浏览器进行“对话”。

Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。

1. location对象

    location.href                       --> 获取当前访问的URL

    location.href = "具体的URL"   --> JS代码控制浏览器跳转到具体的URL

    location.reload()             --> 重新加载当前页面

    

2. var t = setTimeout(要做的事儿, 毫秒数)     --> 多少毫秒之后做什么事儿

   clearTimeout(t)

    

   var t = setInterval(要做的事儿, 毫秒数)    --> 每隔多少毫秒就做什么事儿

clearInterval(t)

清除定时器示例

3. 其他

# js不能关闭用户打开的浏览器

window.open() -打开新窗口

window.close()- 关闭当前窗口

原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180531.html