• 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()- 关闭当前窗口

  • 相关阅读:
    Smith Numbers POJ
    HDU
    dp HDU
    POJ
    HDU
    LOOPS HDU
    水题,P1789 【Mc生存】插火把 (暴力即可)
    LOOPS
    Coprime (单色三角形+莫比乌斯反演(数论容斥))
    莫比乌斯函数 51nod-1240(合数分解试除法)
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180531.html
Copyright © 2020-2023  润新知