作业题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文
function secret(n){
let num1,num2,num3,num4,temp,temp1;
num1 = ((n % 10) + 5) % 10;
num2 = ((parseInt(n % 10) % 10) + 5 ) % 10;
num3 = ((parseInt(n / 100) % 10) + 5) % 10;
num4 = ((parseInt(n / 1000)) + 5) % 10;
temp = num1;
num1 = num4;
num4 = temp;
temp1 = num2;
num2 = num3;
num3 = temp1;
let str = `${num4}${num3}${num2}${num1}`
return str
}
let n = +prompt("输入四位整数");
console.log(n);
console.log(secret(n));
//第二种方法
function getPassword(str){
let pwd = '';
for(let i = 0;i < 4;i++){
let char = str[i] //char变量中存放的是数字字符(单引号括起来的数字)---'1'
let p1 = (chasr*1+5) % 10; //char*1:将数字字符转换成整数---只有number类型数据才能进行算数的运算
pwd += p1 //pwd:6789 ---> 9876
}
return `${pwd[3]}${pwd[2]}${pwd[1]}${pwd[0]}`
}
let st = getPassword('1234');
1、电话号码的数据类型:'85647896'、'13578945621'
2、数字与数组字符的区别:
(1)数字(0、1、2、3、4、5、6、7、8、9):ASCII码值是它本身
(2)数字字符:用单引号括起来的数字('0'、'1'、'2'、'3'......),ASCII码值(‘0’是48)
(3)数字字符和数字之间的转换
'1'-'0' ----> 49 - 48 = 1
'2'-'0' -----> 50 - 48 = 2
3、字符串是以数组的形式存放的:在访问字符串中某个字符时可以通过"数组名[下标]"的方式来访问
二、函数表达式
概念:将定义的函数赋给一个变量,通过变量完成函数的调用和参数传递(即函数是匿名的)
1.定义:
var/let/const 变量名 = function(【参数】){
函数体语句
}
2.调用 变量名(【参数】)
例:
let min = function(val1,val2){
if(val1 < val2){
return val1
}else{
return val2
}
}
let t = min(12,25)
console.log('最小数:',t)
三、函数的递归调用(重点 难点)
1、递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)
2、递归算法:
(1)用递归方式解决问题的前提
a、问题可以进行分解,分解得到的新问题的解法与原问题的解法相同
8! --> 8* 7! --->7 6!-->.......2!-->2 * 1!
b、问题的分解过程必须有明确的结束条件
(2)递归的过程
a、自上而下分解问题:得到最简单的问题的解
b、自下而上回溯得到原问题的解
3、代码实现:
例:用递归函数计算 n!(n的阶乘)
function fun(n){
//1.明确递归结束的条件
if(n == 0){
return 1
}else{
//2.继续分解n
return n * fun(n - 1); //函数自己调用自己:在调用过程分解问题
}
}
let m = fun(5);
console.log("5!=",m);
练习1.定义递归函数,计算1+2+3....+100的值
function fun(n) {
if (n == 1) {
return n
} else {
return fun(n - 1) + n;
}
}
let m = fun(100);
console.log('之和=', m);
四、对象
1.定义:对象是一种数据类型(复合数据类型),对象中包含了属性和方法
(1)属性:表示对象的静态特征。使用方式为 “ 对象名.属性名”
(2)方法(函数):表示对象的行为(动态特征)。使用方式为“对象名.方法名(【参数】)”
2、对象的创建方式:
(1)使用字面量创建:{ }
let / var / const 对象名 = { }
例:
let student = {
no:'wn001',
name:'马云',
sex:'男',
eat:function(){
console.log('马云在吃包子');
},
sleep:function(){
console.log('马云在睡觉');
}
}
对象的属性和方法的使用
例:
console.log('姓名:'+student.name);
console.log('性别:'+student.sex);
student.eat();
student.sleep();
说明:
(1)保存数据的格式:键: 值(key:value) ---- 称为“键值对”
(2)在程序中可以创建空对象:对象名 = { }
(3)给空对象添加属性、方法
3、通过Object来创建对象:
(1)Object对象:是JavaScript中所有对象的基类
(2)创建空对象:new Object()
//通过object创建对象
let obj = new Object();
console.log(obj);
obj.name = '诸葛亮';
obj.sex = '男';
obj.info = function(m,n,t){
console.log('空城计');
}
console.log(obj);
练习2.通过object创建一个对象,该对象的属性有:bookld,bookName,publishing
包含的方法有:
setBookName(name):修改bookName属性值
setPublishing(publishing):修改publishing属性值
showBookInfo():显示图书信息
let obj = new Object()
obj.bookId = '001'
obj.bbokName = '三国演义'
obj.publishing = '商务印书馆'
obj.setBookName = function (name) {
this.bookName = name //this代表当前对象obj
}
obj.setPublishing = function (publishing) {
this.publishing = publishing
}
obj.showBookInfo = function () {
console.log('图书编号:', this.bookId);
console.log('图书名称:', this.bookName);
console.log('出版社:', this.publishing);
}
obj.showBookInfo()
console.log('-----------------------------');
obj.setBookName('水浒传');
obj.setPublishing('机械工业出版社');
obj.showBookInfo();
第二种
let book = new Object({
bookId: '001',
bookName: 'ABC',
publishing: '电子工业',
setBookName:function(name){
this.bookName = name
},
setPublishing:function(publishing){
this.publishing = publishing
},
showBookInfo:function(){
let str = `图书编号:${this.bookId}\n图书名称:${this.bookName}\n出版社:${this.publishing}`
console.log(str)
}
})
book.showBookInfo()
console.log('--------------------------')
book.setBookName('红楼梦')
book.setPublishing('北大出版社')
book.showBookInfo()
4.利用构造函数创建对象
(1)构造函数:是一个函数(定义方式和普通函数的定义方式一样的)
function 构造函数名(【参数】){
this.属性名 = 属性值
this.方法名 = function(【参数】){
方法体语句
}
}
建议:构造方法名的首字母要大写
定义构造方法就是画图纸的过程,通过构造方法创建对象(new 构造方法名())就是根据图纸生成对象的过程
(2)通过构造方法创建对象:new 构造方法名(【参数】)
(3)对象使用属性和方法:
对象名.属性
对象名.方法名(【参数】)
1.定义一个构造方法:包含name、sex、address三个属性,setName(name)、setSex(sex)、setAddress(address)三个方法
function Student(){ //类似于画图纸
this.name = '王昭君'
this.sex = '女'
this.address = '西安'
this.setName = function(name){
this.name = name
}
this.setSex = function(sex){
this.sex = sex
}
this.setAddress = function(address){
this.address = address
}
}
利用构造方法创建对象
let s1 = new Student() //强调:构造方法中的this代表当前创建的对象s1
console.log('姓名:',s1.name)
console.log('性别:',s1.sex)
console.log('地址:',s1.address)
let s2 = new Student() //this代表s2
s2.setName('西施')
console.log('姓名:',s2.name)