python—day47 前端知识之 [ 词法分析、内置对象和方法]

5.31早上面试题:

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

Blog: https://www.cnblogs.com/liwenzhou/p/8570701.html
1.简单的用%,超过两个值得用format
1 # 定义一个敌人的坐标
2 c = (250, 250)
3 # 利用%进行字符串格式化
4 # print("向他开炮:%s" % c)
5 # print("向他开炮:%s" % (c, ))
6 
7 
8 # 用format进行字符串的格式化
9 # print("向他开炮:{}".format(c))

 

补充:

sort() 排序

1 function sortNumber(x,y){
2     return x-y
3 }
4     
5 
6 var arr1  = [11,2,100,33,23]
7 arr1.sort()  // 100,11,2,23,33  因为只是按照字符串大小来进行比较
8 
9 arr1.sort(sortNumber) // 2,11,23,33,100  通过函数进行冒泡算法

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

词法分析的过程:

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

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

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

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

var age = 18;
function foo(){ console.log(age); var age =22; console.log(age); }
// undefined
// 22
 1 var age = 18;
 2 function foo(){
 3   console.log(age);
 4   var age = 22;
 5   console.log(age);
 6   function age(){
 7     console.log("呵呵");
 8   }
 9   console.log(age);
10 }
11 foo();  // 执行后的结果是?

JavaScript中所有的事物都是对象:字符串、数字、数组、日期,等等;在JavaScript中,对象是拥有属性和方法的数据。

我们在学习基本数据类型的时候已经带大家了解了,JavaScript中的Number对象,String对象,Array对象..

注意var s1 = "abc" 和 var s2 = new String("abc") 的区别   typeof s1 -->string  而s2 --->Object

JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键;

1 var a = {"name":"kermit","age":18}
2 undefined
3 a
4 {name: "kermit", age: 18}
5 a["name"]
6 "kermit"
7 a.name
8 "kermit"

遍历对象中的内容:

var a = {"name":"kermitjam","age":18}
for (var i in a){
    console.log(i,a[i])  
}
//name kermitjam
//age 18

 创建对象:

1 var person = new Object(); //  创建一个person对象
2 person.name = "Kermit"  //person对象的name属性
3 person.age = 18    //person对象的age属性

注意:

ES6中提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。

也就是说,Object结构提供了“字符串--值”的对应,Map结构提供了“值--值”的对应,是一种更完善的Hash结构实现。

 1 var m = new Map();
 2 var o = {p: "Hello World"}
 3 
 4 m.set(o, "content"}
 5 m.get(o)  // "content"
 6 
 7 m.has(o)  // true
 8 m.delete(o)  // true
 9 m.has(o) // false
10 
11 map

 

创建Date对象

 1 var time = new Date()
 2 undefined
 3 time
 4 Thu May 31 2018 16:39:33 GMT+0800 (中国标准时间)
 5 console.log(time.toL)
 6 VM1430:1 undefined
 7 undefined
 8 console.log(time.toLocaleString)
 9 VM1516:1 ƒ toLocaleString() { [native code] }
10 undefined
11 console.log(time.toLocaleString())
12 VM1520:1 2018/5/31 下午4:39:33
 1 //方法1:不指定参数
 2 var d1 = new Date();
 3 console.log(d1.toLocaleString());
 4 //方法2:参数为日期字符串
 5 var d2 = new Date("2004/3/20 11:12");
 6 console.log(d2.toLocaleString());
 7 var d3 = new Date("04/03/20 11:12");
 8 console.log(d3.toLocaleString());
 9 //方法3:参数为毫秒数
10 var d3 = new Date(5000);
11 console.log(d3.toLocaleString());
12 console.log(d3.toUTCString());
13 
14 //方法4:参数为年月日小时分钟秒毫秒
15 var d4 = new Date(2004,2,20,11,12,0,300);
16 console.log(d4.toLocaleString());  //毫秒并不直接显示

Date对象的方法:

 1 var d = new Date(); 
 2 //getDate()                 获取日
 3 //getDay ()                 获取星期
 4 //getMonth ()               获取月(0-11)
 5 //getFullYear ()            获取完整年份
 6 //getYear ()                获取年
 7 //getHours ()               获取小时
 8 //getMinutes ()             获取分钟
 9 //getSeconds ()             获取秒
10 //getMilliseconds ()        获取毫秒
11 //getTime ()                返回累计毫秒数(从1970/1/1午夜)

1 var str1 = '{"name": "Alex", "age": 18}';
2 var obj1 = {"name": "Alex", "age": 18};
3 // JSON字符串转换成对象
4 var obj = JSON.parse(str1); 
5 // 对象转换成JSON字符串
6 var str = JSON.stringify(obj1);

 1 //RegExp对象
 2 
 3 //创建正则对象方式1
 4 // 参数1 正则表达式(不能有空格)
 5 // 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止)和i(忽略大小写)
 6 
 7 // 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
 8 
 9 // 创建RegExp对象方式(逗号后面不要加空格)
10 var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
11 
12 // 匹配响应的字符串
13 var s1 = "bc123";
14 
15 //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
16 reg1.test(s1);  // true
17 
18 // 创建方式2
19 // /填写正则表达式/匹配模式(逗号后面不要加空格)
20 var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;
21 
22 reg2.test(s1);  // true
23 
24 
25 // String对象与正则结合的4个方法
26 var s2 = "hello world";
27 
28 s2.match(/o/g);         // ["o", "o"]             查找字符串中 符合正则 的内容
29 s2.search(/h/g);        // 0                      查找字符串中符合正则表达式的内容位置
30 s2.split(/o/g);         // ["hell", " w", "rld"]  按照正则表达式对字符串进行切割
31 s2.replace(/o/g, "s");  // "hells wsrld"          对字符串按照正则进行替换
32 
33 // 关于匹配模式:g和i的简单示例
34 var s1 = "name:Alex age:18";
35 
36 s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:Alex age:18"
37 s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:Alex 哈哈哈ge:18"      全局匹配
38 s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写
39 
40 
41 // 注意事项1:
42 // 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。
43 // 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
44 // 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
45 // 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
46 // 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
47 // 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。
48 
49 var reg3 = /foo/g;
50 // 此时 regex.lastIndex=0
51 reg3.test('foo'); // 返回true
52 // 此时 regex.lastIndex=3
53 reg3.test('xxxfoo'); // 还是返回true
54 // 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号。
55 
56 // 注意事项2(说出来你可能不信系列):
57 // 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test("undefined"), 并且/undefined/.test()默认返回true。
58 var reg4 = /^undefined$/;
59 reg4.test(); // 返回true
60 reg4.test(undefined); // 返回true
61 reg4.test("undefined"); // 返回true
62 
63 RegExp相关
View Code

 1 abs(x)      返回数的绝对值。
 2 exp(x)      返回 e 的指数。
 3 floor(x)    对数进行下舍入。
 4 log(x)      返回数的自然对数(底为e)。
 5 max(x,y)    返回 x 和 y 中的最高值。
 6 min(x,y)    返回 x 和 y 中的最低值。
 7 pow(x,y)    返回 x 的 y 次幂。
 8 random()    返回 0 ~ 1 之间的随机数。
 9 round(x)    把数四舍五入为最接近的整数。
10 sin(x)      返回数的正弦。
11 sqrt(x)     返回数的平方根。
12 tan(x)      返回角的正切。
13 
14 Math

猜你喜欢

转载自www.cnblogs.com/kermitjam/p/9118423.html
今日推荐