C1认证学习笔记(第三章)_想要以下代码运行符合预期则空格处应该填 var obj = { realname ‘张三‘, ph(1)

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

if(num === str) {
console.log(“Yes”)
} else {
console.log(“No”)
}
预期输出结果:




> 
> `No`
> 
> 
> 


③:以下JavaScript代码运行的预期输出结果是?



var res1 = 5 > 8
var res2 = true
if(res1 && res2) {
console.log(“Yes”)
} else {
console.log(“No”)
}
预期输出结果:



**思路:变量res1是表达式5 > 8的结果,即为false。变量res2为true。然后对res1和res2进行与操作,因为res1为false,所以res1 && res2的结果也为false。与运算,当其中任何一个操作数为false时,该运算的结果为false,只有当两个操作数都为true时,其运算结果才为true**



> 
> `NO`
> 
> 
> 


④:以下JavaScript代码运行的预期输出结果是?



var res1 = 6 > 3
var res2 = 8 >= 8
var res3 = false
if(res1 || res2 && res3) {
console.log(“Yes”)
} else {
console.log(“No”)
}
预期输出结果:



**思路:这里涉及到`与`运算和`或`运算的优先级。`与`的优先级比`或`的高。所以`res1 || res2 && res3`的运算循顺序是先计算`res2 && res3`,然后再将其结果`(false)和res1`做或运算。**



> 
> `YES`
> 
> 
> 


⑤:以下JavaScript代码运行的预期输出结果是?



var num = 8
if(true || (num = 9)) {
console.log(num)
}

预期输出结果:



**思路:这里涉及到逻辑运算的短路机制,对于`或`运算,当第一个操作数是`true`时,该运算的结果是`true`,第二个操作数不会被求值(如果是表达式的话就不会被执行)**



> 
> `8`
> 
> 
> 


### 隐式类型转换:


##### 任务目标:


理解并掌握常见场景中隐式类型转换的规律


##### 任务背景:


每一个变量或者值都有其对应的类型,在JavaScript中如Number、String、Boolean、Array、Object等。在强类型的语言中,不同类型的变量或值之间不能进行运算;在弱类型的语言中,不同类型的变量或值可进行一些运算,这主要是因为解释器做了隐式类型转换的工作。


##### 任务内容:


###### 字符串和数字的运算:


**字符串和数字进行加运算时,会将数字转换成字符串,然后和另一个字符串进行拼接**



var num1 = ‘123’
var num2 = 12
var num3 = num1 + num2
console.log(num3) // 预期输出:‘12312’


**字符串和数字进行减、乘、除运算,以及大小比较时,会将字符串转换成数字,再和另一个数字进行运算或比较**



var num1 = ‘123’
var num2 = 12
var num3 = num1 - num2
console.log(num3) // 预期输出:111
var num1 = ‘123’
var num2 = 12
var num3 = num1 * num2
console.log(num3) // 预期输出:1476
var num1 = ‘123’
var num2 = 12
var num3 = num1 / num2
console.log(num3) // 预期输出:10.25
var num1 = ‘123’
var num2 = 15
var t = num1 > num2
console.log(t) // 预期输出:true


###### 各种值转换成布尔值:


* 数字0,空字符串"",null,undefined 转成布尔值的时候都是false
* 非0数字,非空字符串转成布尔值的时候都是true
* 任何数组(即使是空数组),任何对象(即使是空对象) 转成布尔值的时候都是true



var a = 0
if (a) {
console.log(‘hello’)
} else {
console.log(‘world’)
}
// 当a=0或""或null或undefined的时候,预期输出:world
// 当a=[]或空对象的时候,预期输出:hello
// 当a=-1或"abc"时候,预期输出:hello


##### 任务练习:


①:以下代码的预期输出是?



var arr = []
var str
if (arr) {
str = ‘hello’
}
console.log(str)

预期输出:




> 
> `hello`
> 
> 
> 


②:要想是一下JavaScript代码运行符合预期,空格处应该填什么运算符?



var a = true
var b = 2
var c = a ___ b
console.log©

预期输出:
2


思路:  
 **b为2,1*2会得到2,或者0+2会得到2  
 空格处应该填*,true会被隐式转换成1参入运算**



> 
> `*`
> 
> 
> 


③:以下JavaScript代码运行的预期输出结果是?



var res = 567 + ‘1’ - 89
console.log(res)

预期输出:




567 + ‘1’ - 89 = ‘567’ + ‘1’ - 89 = ‘5671’ - 89 = 5671 - 89 = 5582



> 
> `5582`
> 
> 
> 


④:以下JavaScript代码运行的预期输出结果是?



if (null) {
console.log(‘Hello’)
} else {
console.log(‘World’)
}

预期输出:



**思路:null是JS里面一个特殊的值,表示什么都没有,在这里会被转成布尔值。转成布尔类型的话,则为`false`**



> 
> `World`
> 
> 
> 


⑤:以下JavaScript代码运行的预期输出结果是?



var a = {}
if (a) {
console.log(‘Hello’)
} else {
console.log(‘World’)
}

预期输出:



思路:`{}`表示一个空的对象,在这里会被转成布尔值。在JS中,空对象转成布尔类型的话,其值为`true`



> 
> `Hello`
> 
> 
> 


### 条件分支:


##### 任务目标:


理解并掌握if分支  
 理解并掌握switch分支


##### 任务背景:


条件分支是编程语言必备的流程控制之一。它能根据所给定值或表达式的真假来运行不同区块的代码。日常编码中,不可避免的要使用到它。


##### 任务内容:


###### if分支:


**基本语法结构:**



if (条件1) {
// 代码块1
} else if (条件2) {
// 代码块2
} else {
// 代码块3
}


**说明:**


* 如果条件1为真就会执行代码块1。即使条件2为真也不会去执行代码块2,更不会执行代码块3
* 只有当条件1为假,并且条件2为真的时候,才会执行代码块2
* 如果条件1和条件2都为假,才会执行代码块3
* else if 和 else 部分不是必需的。
* 可以有多个else if


**示例:**



var x = 20
if (x > 5) {
console.log(‘a’)
} else if (x > 50) {
console.log(‘b’)
} else {
console.log(‘c’)
}
// 如果x=20,上述代码预期输出:‘a’
// 如果x=100,上述代码预期输出也是:‘a’


###### switch分支:


**基本语法结果:**



switch (expression) {
case value1:
// 当 expression 的结果与 value1 匹配时,执行此处语句
[break;]
case value2:
// 当 expression 的结果与 value2 匹配时,执行此处语句
[break;]

case valueN:
// 当 expression 的结果与 valueN 匹配时,执行此处语句
[break;]
[default:
// 如果 expression 与上面的 value 值都不匹配,执行此处语句
[break;]]
}


**说明:**


* []表示这一部分语句是可选的,并不是说正常代码中要加[]
* expression和value的是进行严格模式的匹配
* 如果所有case都没有匹配到,将执行default分支的代码


**示例:**



var expr = ‘樱桃’
switch (expr) {
case ‘樱桃’:
// 代码块1
console.log(‘樱桃每斤7元’);
break;
case ‘芒果’:
case ‘木瓜’:
// 代码块2
console.log(‘芒果 和 木瓜 每斤10元’);
break;
default:
// 代码块3
console.log(‘对不起,我们没有 ’ + expr + ‘.’);
}
// 如果expr值为’樱桃’,则预期输出:‘樱桃每斤7元’
// 当expr的值为’樱桃’时就会执行代码块1,且代码块1中有break,所有不会执行其他代码块
// 注意:如果expr匹配到某一个case,且这个case里面代码没有break,那么执行完这个代码块后,紧接着就会执行下一个case的代码,不管expr有没有匹配到下一个case的值
// 所以当expr的值为’芒果’的时候,代码块2也将被执行


##### 任务练习:


①:以下JavaScript代码的预期输出是?



var a = 8
if (a > 7) {
a = 3
}
if (a > 4) {
a = 5
}
console.log(a)


**思路: 只要满足一个条件就不会执行第二条**



> 
> `3`
> 
> 
> 


②:要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?



var expr = ____
switch (expr) {
case 1:
// 代码块1
console.log(111);
case 2:
// 代码块2
console.log(222);
case 3:
// 代码块3
console.log(333);
break;
case 5:
// 代码块5
console.log(111);
case 6:
// 代码块6
console.log(222);
break;
default:
// 代码块7
console.log(111);
}
预期输出:
111
222


**思路:只有当expr为5时,会执行代码块5、代码块6,从而打印111, 222 符合预期输出**



> 
> `5`
> 
> 
> 


③:以下JavaScript代码运行的预期输出结果是?



var num = 89
if (num < 89) {
console.log(‘a’)
} else if (num > 89) {
console.log(‘b’)
} else {
console.log(‘c’)
}
预期输出:




> 
> `c`
> 
> 
> 


④:以下JavaScript代码运行的预期输出结果是?



if (8 > 7) {
console.log(‘Hello’)
} else {
console.log(‘World’)
}
预期输出:



**思路:8 > 7为`true`,所以会执行`console.log('Hello')`**


⑤:以下JavaScript代码运行的预期输出结果是?



if (78 < 67) {
if (45 > 23) {
console.log(‘a’)
} else {
console.log(‘b’)
}
} else {
if (89 > 45) {
console.log(‘c’)
} else {
console.log(‘d’)
}
}
预期输出:




> 
> `c`
> 
> 
> 


### For循环:


##### 任务目标:


理解JavaScript的for循环代码结构  
 理解JavaScript的for循环对数字、数组、对象的操作  
 掌握JavaScript的for循环的迭代器递增、递减的操作


##### 任务背景:


当我们在编写代码的时候,假如您需要运行代码多次,且每次使用不同的值,那么循环相当方便使用。


###### for循环的使用方法:


* for:多次遍历代码块
* for/in:遍历对象属性


###### 使用示例:



for (语句 1; 语句 2; 语句 3) {
要执行的代码块
}


**2.1 for循环是您希望创建循环时经常使用的语法结构,代码结构如下:**


* 语句 1 在循环(代码块)开始之前执行。
* 语句 2 定义运行循环(代码块)的条件。
* 语句 3 会在循环(代码块)每次被执行后执行。


**2.2 for循环代码实例一(普通遍历):**



for (var i = 0; i < 10; i++) {
console.log(i)
}
// 执行结果
0 1 2 3 4 5 6 7 8 9

for (var i = 0; i < 10; i+=2) {
console.log(i)
}
// 执行结果
0 2 4 6 8


**说明:**


* 语句1在循环之前设置一个变量(var i = 0),从0开始遍历
* 语句2定义运行循环的条件(i必须小于10),当i = 10的时候不满足循环条件
* 语句3会在代码块每次执行之后对变量值i进行递增(i++)
* 语句3 (i+=2) 相当于每次循环迭代器i+2,也可以这么写(i=i+2)


**2.3 for循环代码实例二(数组遍历):**



var arr = [11, 22, 33, 44, 55]
for (var i = 0; i < arr.length; i++) {
console.log(arr[i])
}
// 执行结果
11 22 33 44 55


**说明:**


* 语句1在循环之前设置一个变量(var i = 0),从0开始遍历(数组下标从0开始)
* 语句2定义运行循环的条件(i必须小于arr的数组长度),当arr下标正好是0-3,4的时候不满足循环要求
* 语句3会在代码块每次执行之后对变量值i进行递增(i++)从arr[0]-arr[3]


**2.4 for循环代码实例三(对象遍历):**



var obj = {name:“tom”, gender:“man”, age:32}
for (var key in obj) {
// 打印键
console.log(key)
// 打印值
console.log(obj[key])
}
// 执行结果
name
tom
gender
man
age
32


**说明:**



> 
> JavaScript提供了一种特殊的循环(也就是for …  
>  in循环),用来迭代对象的属性或数组的每个元素,for…in循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引
> 
> 
> 


想要以下代码运行符合预期则空格处应该填什么整型数字?



for (var i=0; i <= ___; i++) {
console.log(i)
}
预期输出结果: 0 1 2 3 4 5



> 
> `5`
> 
> 
> 


②:想要以下代码运行符合预期则空格处应该填什么整型数字?



for (var i=1; i <= ___; i+=1) {
console.log(i)
}
预期输出结果:1 2 3 4 5 6 7 8 9



> 
> `9`
> 
> 
> 


③:想要以下代码运行符合预期则空格处应该填什么整型数字?



var arr = [‘a1’, ‘b1’, ‘c1’, ‘d1’, ‘e1’, ‘f1’, ‘g1’, ‘h1’]
for (var i=0; i < arr.length; i+=___) {
console.log(arr[i])
}
预期结果:a1 d1 g1



> 
> `3`
> 
> 
> 


④:想要以下代码运行符合预期则空格处应该填?



var obj = {
realName:‘张三’,
phone:13344556789,
email:‘zhangsan@163.com’,
created_at:‘2021-06-12 10:00:00’
}
for (var k in obj) {
if(k === _______ ){
console.log(obj[k])
}
}
预期结果:zhangsan@163.com



> 
> `'email'`
> 
> 
> 


⑤:想要以下代码运行符合预期则空格处应该填什么整数?



for (var i=4; i<9; i+=___) {
console.log(i)
}
预期输出:
4
7


**思路:第一次循环打印了4,第二次循环打印了7,由此我们可以知道i在每一次循环后的自增值**



> 
> `3`
> 
> 
> 


### Math内置对象:


##### 任务目标:


理解与灵活运用JavaScript的Math对象的常用方法


##### 任务背景:


Math对象的作用是:执行常见的算数任务。保存数学公式和信息,与我们在JavaScript直接编写计算功能相比,Math对象提供的计算功能执行起来要快得多。


###### Math对象的常用方法:


![在这里插入图片描述](https://img-blog.csdnimg.cn/ee0fadc404fc4a4db4775a9c3109046c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JC95a-e55qE6a2a5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)  
 **实例:**



// 要想以下JavaScript代码符合预期,空格处应该填什么?
var a = Math._____(-120.38)
console.log(a)
预期输出结果:
-121


* 给出的数值-120.38 ,预期结果-121,说明是向下取整
* Math.floor() 正是向下取整


**组合实例:**



// 获取一个10-50的随机整数
var num = Math.floor(Math.random()*40)+10
Math.random()*40 //获取40以内的随机数(当前还是浮点数)


【思路】:


* Math.random()\*40;为获取一个40以内的随机数(浮点数)
* Math.floor(Math.random()\*40);将这个浮点数舍1取整
* 在最后加10则不管随机数是最小数还是最大数,都满足要求10-50


##### 任务练习:


①:表达式 Math.\_\_\_\_(13.6589)计算结果为13,则空格处应该填?



> 
> `floor`
> 
> 
> 


②:要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?(使用中文逗号「,」隔开)



var a = -14.4
var b = 10
var c = Math.____ (a*b)
var d = Math.____ ©
console.log(d)
预期输出结果:
12


**思路:首先a\*b的默认结果为`-144`(已是整数,取整方法不适用),已知的Math方法里取绝对值可以将`-144转为144`;144的平方根正好符合答案,故使用平方根方法**



> 
> `abs,sqrt`
> 
> 
> 


③:要想以下JavaScript代码符合预期,空格处应该填什么整数?



console.log(Math.sqrt(____))
预期输出结果:
9



> 
> `81`
> 
> 
> 


④:要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?



console.log(Math.____(3, 4, 89))
预期输出结果:
89



> 
> `max`
> 
> 
> 


⑤:要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?



console.log(Math.____(8.01))
预期输出结果:
9



> 
> `ceil`
> 
> 
> 


### 对象属性:


##### 任务目标:


理解并掌握JavaScript中如何查询对象的属性  
 理解并掌握JavaScript中如何添加对象的属性  
 理解并掌握JavaScript中使用for-in遍历对象属性


##### 任务背景:


对象属性指的是与JavaScript对象相关的值。JavaScript对象是无序属性的集合。属性通常可以被修改、添加和删除,但是某些属性是只读的。


##### 任务内容:


**1.对象定义(以下操作都基于这个对象)**



// 定义一个对象
var obj = { name: “李明”, age: 18, gender: “man”, city: “山东”, hobby: “游泳” }


**2、访问对象属性的语法**



// 访问对象属性方式一
obj.name
// 访问对象属性方式二
obj[‘name’]
// 访问对象属性方式三
// 将对象属性赋值给一个变量,使用变量方式访问
var key = ‘name’
obj[key]


**3、添加对象的属性语法**



// 添加一个属性方式一
obj.nickName = “小明”
// 添加一个属性方式二
obj[“nickName”] = “小明”
console.log(obj)
// {name: ‘李明’, age: 19, gender: ‘man’, city: ‘山东’, hobby: ‘游泳’, nickName: “小明”}


**4、修改对象的属性语法**



// 修改一个属性方式一
obj.age = 19
// 修改一个属性方式二
obj[“age”] = 19
console.log(obj)
// { name: ‘李明’, age: 19, gender: ‘man’, city: ‘山东’, hobby: ‘游泳’}


**5、删除对象的属性语法**



// 删除一个属性
delete obj.age

console.log(obj)
// {name:‘李明’, gender: ‘man’, city: ‘山东’, hobby: ‘游泳’}


**6、for循环遍历对象属性的语法**



// for循环遍历对象,需要使用for … in
for (var key in obj) {
console.log(key)
console.log(obj[key])
}


##### 任务练习:


①:要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?



var obj = {name: ‘lisi’, city: ‘北京’, age: 21}
console.log(obj._______)

// 预期输出结果:21



> 
> `age`
> 
> 
> 


②:要想以下JavaScript代码符合预期,空格处应该填什么字符串?



var obj = {id: 1, title: ‘React-JSX语法’, lengtth: “120”, created_at: “2021-07-01”, created_staf: “张三”}
var adminName = ‘_______’
console.log(obj[adminName])
预期输出结果:
张三



> 
> `created_staf`
> 
> 
> 


③:要想以下JavaScript代码符合预期,空格处应该填什么?



var obj = {
name: ‘李四’,
school: ‘北京大学’,
age: 23
}
console.log(obj.____)
预期输出结果:
北京大学



> 
> `school`
> 
> 
> 


④:要想以下JavaScript代码符合预期,空格处应该填什么整数?



var obj = {
name: ‘王五’,
friends: [‘张三’, ‘李四’],
age: 23
}

console.log(obj.friends[____])
预期输出结果:
李四


思路:`obj`这个对象的`friends`属性是一个数组,现在要打印这个数组的某一个索引上的值打印结果是李四,该索引就是李四这个值的索引



> 
> `1`
> 
> 
> 


⑤:要想以下JavaScript代码符合预期,空格处应该填什么?



var obj = {
name: ‘小明’,
friends: [‘张三’, ‘李四’],
hobby: [‘篮球’, ‘足球’, ‘游泳’, ‘看书’],
age: 23
}

console.log(obj.name + ‘喜欢’ + obj.____[1])

预期输出结果:
小明喜欢足球



> 
> `hobby`
> 
> 
> 


### 函数定义与调用:


##### 任务目标:


理解并掌握JavaScript中函数的定义的两种方式:声明式,表达式式  
 理解并掌握JavaScript中函数的调用


##### 任务背景:


我们可以把一系列的代码封装成一个函数,然后在任意位置去调用它,从而执行这一系列的代码。使用函数是一种简单直观的复用代码的方式。合理的定义和使用函数能使得我们的代码结构更加清晰、更便于阅读和维护。


###### 通过声明来定义函数:


**1.1 function关键字:**



> 
> 我们可以使用function关键字来定义一个具有名称的函数,其语法结构如下
> 
> 
> 



function name([param[, param[, … param]]])
{
[statements]
}


**1.2 说明:**


* []表示可选,并不是正常代码中需要使用[]
* name表示函数名,()中的表示参数,{}中的表示函数体。在函数被调用的时候,会执行函数体中的代码。
* 注意:函数被定义的时候,函数体中的代码并不会被执行。只有到函数被调用的时候,函数体中的代码才会被执行。
* 对于使用函数声明这个方法定义的函数,函数调用可以在函数定义之前,如示例中的pri函数。


**1.3 示例:**



pri(); // 预期输出:“foo”
function pri() {
console.log(“foo”);
}


###### 通过表达式来定义函数:


**2.1 表达式定义法:**



> 
> 我们还可以使用函数表达式的方式来定义一个函数,这时可以将函数直接赋值给一个变量,其语法结构如下
> 
> 
> 



var myFunction = function name([param[, param[, … param]]]) {
statements
}


**2.2 说明:**


* []表示可选,并不是正常代码中需要使用[]
* name表示函数名,可以省略,()中的表示参数,{}中的表示函数体。在函数被调用的时候,会执行函数体中的代码。
* 注意:函数被定义的时候,函数体中的代码并不会被执行。只有到函数被调用的时候,函数体中的代码才会被执行。
* 对于使用函数表达式这个方法定义的函数,函数调用必须在函数定义之后。
* 如果省略name,我们称该函数为匿名函数。


**2.3 示例:**



var myFunction = function foo() {
// statements
}
myFunction()
foo() // 会报错,并不能调用成功。命名函数表达式的好处是当我们遇到错误时,堆栈跟踪会显示函数名,容易寻找错误。


###### 函数调用:


* 对于使用函数声明的方法定义的函数,可以使用函数名加括号的方式来调用;对于使用函数表达式定义的函数,可以使用表达式所赋值的变量名加括号来调用。如上述代码所示。
* 在函数被执行的时候,会运行函数体中的代码。如果函数体中有return语句,则会在函数被调用处返回return出来的值,并结束函数的运行。return并不是必需的,没有return的话,函数会返回undefined。



function add1(a, b) {
return a + b;
}
var res = add1(4, 5)
console.log(res) // 预期输出:9

function add2(a, b) {
a + b;
}
var res = add2(4, 5)
console.log(res) // 预期输出:undefined
函数在调用的时候,会将调用时给定的参数和定义时设定的参数依次绑定。如果调用时给定的参数个数不够,那么函数体中没有绑定的参数将被赋值为undefined

function foo(a, b) {
console.log(b)
}
foo(4) // 预期输出:undefined
foo(4,8) // 预期输出:8
函数在调用时可以接受一个函数作为参数,也可以返回一个函数作为返回值。这是函数的高阶用法,暂不涉及,可自行查阅。


##### 任务练习:


①:要想以下JavaScript代码符合预期,空格处应该填什么整型数字?



function foo(a, b) {
return a * b
}
console.log(foo(8, ___))
预期输出:
32


**4\*8=32**



> 
> `4`
> 
> 
> 


②:要想以下JavaScript代码符合预期,空格处应该填什么整型数字?



function foo(a) {
return a * a * a
}
console.log(foo(___))
预期输出:
27


**3的立方是27**



> 
> `3`
> 
> 
> 


③:要想以下JavaScript代码符合预期,空格处应该填什么?



var obj = {
name: ‘小明’,
friends: [‘张三’, ‘李四’],
hobby: [‘篮球’, ‘足球’, ‘游泳’, ‘看书’],
age: 23,
getNewFriend: function (newFriend) {
this.friends.push(newFriend)
}
}

obj._______(‘王五’)

console.log(obj.friends[2])

预期输出:
王五



> 
> `getNewFriend`
> 
> 
> 


④:以下的JavaScript代码的预期输出是?



var checkNum = function (num) {
return num % 2 === 0
}
if (checkNum(8)) {
console.log(‘Hello’)
} else {
console.log(‘World’)
}

预期输出:



**思路:将一个函数表达式赋值给了`checkNum`变量,后面就可以使用`checkNum`来调用这个函数了;  
 除以2取余为0,简单来说,这个函数的作用是判断参数是否是一个偶数。**



> 
> `Hello`
> 
> 
> 


⑤:以下的JavaScript代码的预期输出是?



var checkNum = function (num, divisor) {
return num % divisor === 0
}
if (checkNum(27, 5)) {
console.log(‘Hello’)
} else {
console.log(‘World’)
}

预期输出:



**27➗5不等于0 所以 返回 else**



> 
> `World`
> 
> 
> 


### 常见内置函数:


##### 任务目标:


理解并掌握JavaScript中常见的内置函数


##### 任务背景:


JavaScript是一个基于原型链的面向对象的语言,很多其他语言常见的函数会以对象上的各种方法存在,例如数组对象的各种方法,字符串对象的各种方法等。即便如此,JavaScript还是有一些顶层的内置函数,了解这些常见的内置函数对我们进行JavaScript编码有很大的帮助。


###### eval:



> 
> eval函数会将传入的字符串当做 JavaScript 代码进行执行。这是一个十分危险的函数,一般情况不建议使用。
> 
> 
> 



var a = eval(“2+2”)
console.log(a)
// 预期输出:4
// 这里eval把字符串"2+2",当成js代码执行,得到结果4

eval(“console.log(‘hello world’)”)
// 预期输出:hello world
// 这里eval把字符串"console.log(‘hello world’)",当成js代码执行,打印输出:hello world


###### isNaN:



> 
> 用来确定一个值是否为NaN。NaN表示不是一个数字。如果isNaN函数的参数不是Number类型, isNaN函数会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非NaN数值来说(空字符串和布尔值分别会被强制转换为数值0和1),返回false值也许会让人感觉莫名其妙。比如说,空字符串就明显“不是数值(nota number)”。这种怪异行为起源于:"不是数值(not anumber)"在基于IEEE-754数值的浮点计算体制中代表了一种特定的含义。isNaN函数其实等同于回答了这样一个问题:被测试的值在被强制转换成数值时会不会返回IEEE-754​中所谓的“不是数值(nota number)”。
> 
> 
> 



isNaN(‘abc’) // 返回值:true 因为字符串’abc’不是一个数字
isNaN(‘12.23’) // 返回值:false 因为字符串’12.23’是一个数字

isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true

isNaN(true); // false
isNaN(null); // false
isNaN(37); // false

// strings
isNaN(“37”); // false: 可以被转换成数值37
isNaN(“37.37”); // false: 可以被转换成数值37.37
isNaN(“37,5”); // true
isNaN(‘123ABC’); // true: parseInt(“123ABC”)的结果是 123, 但是Number(“123ABC”)结果是 NaN
isNaN(“”); // false: 空字符串被转换成0
isNaN(" "); // false: 包含空格的字符串被转换成0

// dates
isNaN(new Date()); // false
isNaN(new Date().toString()); // true

isNaN(“blabla”) // true: "blabla"不能转换成数值
// 转换成数值失败, 返回NaN


###### parseFloat:



> 
> 根据给定的参数返回其对应的浮点数。
> 
> 
> 



parseFloat(3.14);
parseFloat(‘3.14’);
parseFloat(’ 3.14 ');
parseFloat(‘314e-2’);
parseFloat(‘0.0314E+2’);
parseFloat(‘3.14some non-digit characters’);
// 以上的返回值都是3.14


###### parseInt:



> 
> 解析一个字符串并返回指定基数的十进制整数。
> 
> 
> 



parseInt(“0xF”, 16);
parseInt(“F”, 16);
parseInt(“17”, 8);
parseInt(021, 8);
parseInt(“015”, 10); // parseInt(015, 8); 返回 13 parseInt(15.99, 10);
parseInt(“15,123”, 10);
parseInt(“FXX123”, 16);
parseInt(“1111”, 2);
parseInt(“15 * 3”, 10);
parseInt(“15e2”, 10);
parseInt(“15px”, 10);
parseInt(“12”, 13); // 以上都返回15,第二个参数表示基数(可以理解为进制)


##### 任务练习:


①:要想以下JavaScript代码运行符合预期,空格处应该填什么?



if (isNaN(‘.67’) === ___) {
console.log(‘hello’)
}

预期输出:
hello



> 
> `false`
> 
> 
> 


②:要想以下JavaScript代码运行符合预期,空格处应该填什么整数?



console.log(parseInt(“21”, ____))
预期输出:
17


**思路:`parseInt`这个内置函数会把第一个参数按照第二个参数指定的基数(或者说是进制)转成一个十进制整数并返回;  
 现在第一个参数是"21",最终转成的10进制数是17,而八进制下的21就是10进制下的17。**



> 
> `8`
> 
> 
> 


③:以下的JavaScript代码的预期输出是?



console.log(parseFloat(‘8.9a89bd’))
预期输出:




> 
> `8.9`
> 
> 
> 


④:以下的JavaScript代码的预期输出是?



if (isNaN(‘3e4’) === false) {
console.log(‘Hello’)
} else {
console.log(‘World’)
}

预期输出:



**思路:`isNaN`内置函数是判断一个字符串是否不是一个数字**



> 
> `Hello`
> 
> 
> 


### 字符串定义与转义字符:


##### 任务目标:


理解并掌握JavaScript中字符串的定义方法  
 理解并掌握JavaScript中常见的特殊字符的转义方法


##### 任务背景:


在各种编程语言中,字符串一直都是十分基础与重要的数据类型。在JavaScript中有多种定义字符串的方式,每种方式适合不同的应用场景。字符串中除了包含一般常见的字符外,可能还需要包含一些特殊字符(例如回车、制表符等),这时就需要转义字符的协助了。掌握字符串的常见定义方法,熟悉常见的特殊字符的转义方式,会提升我们的编码能力。


##### 任务内容:


###### 使用引号来定义字符串:



> 
> 我们可以使用一对单引号或者一对双引号来定义一个字符串
> 
> 
> 



var str1 = “这是双引号定义的字符串”
var str2 = ‘这是单引号定义的字符串’
// 1. 在JavaScript中双引号定义的字符串和单引号定义的字符串没有本质区别
// 2. 无论是单引号还是双引号,都必须配对使用,不能一个单引号和双引号配对
// 3. 单引号中的字符串中不能出现单引号,可以出现双引号;双引号中的字符串中不能出现双引号,可以出现单引号



> 
> 使用模板字符串的方式定义字符串:我们可以使用一对反引号来定义字符串
> 
> 
> 



var str1 = 这是一个普通的字符串
var str2 = 这是一个换行的 字符串
var a = 2
var b = 3
var str3 = 这是一个可以解析变量的字符串,例如:${a + b}
// 最终str3的值为:
// 这是一个可以解析变量的字符串,例如:5


###### 转义符:



> 
> 在定义一个字符串的时候,有些特殊字符并不适合直接出现。例如:换行符、单引号(不能出现在单引号内)、双引号(不能出现在双引号内),这个时候可以我们需要使用\转义符,例如:
> 
> 
> 



var str1 = ‘这是一个换行的\n字符串’
console.log(str1)
// 预期输出:
// 这是一个换行的
// 字符串

// 在这里使用了\n来代表换行符。如果直接在定义字符串的时候回车换行,将出现语法错误

var str2 = “如何使用双引号”"
console.log(str2)
// 预期输出:
// 如何使用双引号"
// 在这里使用了"来代表双引号。如果在双引号定义的字符串中直接使用双引号,将出现语法错误。单引号同理。

// 如果使用模板字符串的方式定义字符串,可以直接使用回车换行。但是要在其中使用反引号`,也必须转义


##### 任务练习:


①:要想以下JavaScript代码运行符合预期,空格处需要填写什么?



var str = ________
console.log(str)

预期输出:
小明说:“吃饭吗?”
我说:“已经吃过了”


![在这里插入图片描述](https://img-blog.csdnimg.cn/a2e15b79a88f4755b010b7d15d18e8fa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JC95a-e55qE6a2a5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)  
 ②:以下的JavaScript代码的预期输出是?



var str = ‘‘这是为什么呢?’’
console.log(str)
预期输出:




> 
> `'这是为什么呢?'`
> 
> 
> 


③:以下的JavaScript代码的预期输出是?



var str = ‘“这是为什么呢?”’
console.log(str)
预期输出:




> 
> `"这是为什么呢?"`
> 
> 
> 


④:以下的JavaScript代码的预期输出是?



var str = ‘\n这是为什么呢?"’
console.log(str)
预期输出:




> 
> `\n这是为什么呢?"`
> 
> 
> 


### 字符串常见方法与属性:


##### 任务目标:


理解与灵活运用JavaScript的String对象的常用属性  
 理解与灵活使用JavaScript的String对象的常用方法



本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。


最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。


最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。


![](https://img-blog.csdnimg.cn/img_convert/311903982dea1d8a5d2c98fc271b5b41.jpeg)

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

### 学习路线图


 其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。


相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。


![](https://img-blog.csdnimg.cn/img_convert/1ddfaf7dc5879b1120e31fafa1ad4dc7.jpeg)


#### 网络安全工具箱


当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份**我自己整理的网络安全入门工具以及使用教程和实战。**


![](https://img-blog.csdnimg.cn/img_convert/bcd1787ce996787388468bb227d8f959.jpeg)


#### 项目实战


最后就是项目实战,这里带来的是**SRC资料&HW资料**,毕竟实战是检验真理的唯一标准嘛~


![](https://img-blog.csdnimg.cn/img_convert/35fc46df24091ce3c9a5032a9919b755.jpeg)


#### 面试题


归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.youkuaiyun.com/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值