JS-day2

day2

[js] 写一个加密字符串的方法

//对字符串进行加密       
function compileStr(code){ 
  var c=String.fromCharCode(code.charCodeAt(0)+code.length);
 for(var i=1;i<code.length;i++)
  {      
   c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
 }   
 return escape(c);   }

//字符串进行解密 
function uncompileStr(code){      
 code=unescape(code);      
 var c=String.fromCharCode(code.charCodeAt(0)-code.length);      
 for(var i=1;i<code.length;i++)
 {      
  c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));      
 }      
 return c;   }

JS七种加密解密方法

[js] 写一个判断数据类型的方法

   var str = "我是字符串";
   var num = 666;
   var obj = new Object();
   var arr = [1,2,3];
   var fn = function(){
       console.log("函数")
   }
   typeof(str)  //string
   typeof(num)  //number
   typeof(obj)  //object
   typeof(arr)  //object
   typeof(fn)  //function

typeof()——判断简单的数据类型,无法区分复杂数据类型,例如像Object和Array返回的都是Object
instanceof ——仅适用于对象来区分数据类型。同时还可以判断某个实例是否是某个构造函数的实例,但是会出现对应多个构造函数的情况
constructor——判断所有的数据类型。当然他的本质是盘算prototyep属性所在的函数的
jQuery.type()——判断所有的数据类型。

[js] 简要描述下什么是回调函数并写一个例子出来

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调是任何一个被以方法为其第一个参数的其它方法的调用的方法。很多时候,回调是一个当某些事件发生时被调用的方法。

//定义主函数,回调函数作为参数
function A(callback) {
    callback();  
    console.log('我是主函数');      
}

//定义回调函数
function B(){
    setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作  
}

//调用主函数,将函数B传进去
A(B);


输出结果:

我是主函数
我是回调函数

定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。

[js] 简要描述下JS有哪些内置的对象

1.Array数组对象

unshift( )    数组开头增加
功能:给数组开头增加一个或多个

参数:一个或多个

返回值:数组的长度

原数组发生改变

 

shift( )        数组开头删除一项
功能:给数组开头删除一个

参数:无

返回值:被删除的内容

原数组发生改变

 

push( )       数组末尾增加
功能:给数组末尾增加一项或多项

参数:一个或多个

返回值:数组的长度

原数组发生改变

 

pop( )         数组末尾删除一项
功能:给数组末未删除一项

参数:无

返回值:被删除的内容

原数组发生改变

 

concat( )     数组的拼接
ary1.concat( ary2,ary3....)

使用concat可以实现数组的克隆,concat()中不传参数

 

splice(index, howmany, item1, ...itemx)
splice 可以根据参数实现数组的删除,增加,替换

前两个参数 index 和 howmany 是必需的参数,后面的参数可选参数

 

splice(index,  0 ,item1, item2...)     增加
从索引 index 开始增加,增加的内容插入到索引 index 前面

 

splice(index, n)    删除
从索引 index 开始删除n个,如果只有一个参数splice(index),就是从索引  index  开始后面的内容全部删除

 

splice(index, n,item1,item2...)   替换
从索引 index开始替换 n 个,替换的内容为item1, item2....

 

slice(n,m)      截取
从索引 n 截取到索引 m 但不包括 m  ,原数组不发生改变

slice(0)或splice()可以实现数组的克隆

 

reverse()     数组翻转

返回值是翻转后的新数组,原数组发生改变

 

sort()    数组排序
使用方法:sort(function (a,b){return  a-b})     从小到大排

               sort(function (a,b){return  b-a})     从大到小排

 

toString( )   数组转字符串
把数组转成以逗号分隔的字符串

 

join(拼接形式)    拼接
把数组拼接成以其他形式分割的字符串,配合eval()可以实现数学运算        eval(join(‘+’))

 

数组常用但不兼容的方法:
indexOf(查找内容)   查找
ary.indexOf(查找内容)    查找数组中是否有某项,有的话返回该项的所引,没有话返回-1;

 

 
forEach()  遍历
forEach接收两个参数,一个callback,thisArg
callback接收三个参数:1)item 2)index 3)input
thisArg用来改变callback中的this指向;
forEach 没有返回值,但是map有返回值
 

map()   遍历
 

2.string字符串

charAT(index)      通过索引找字符

 

charCodeAt(index)      通过索引找到字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。

 方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。

 

indexOf()      从前往后找,找到返回内容的索引,找不到返回-1;

 

lastIndexOf()      从后往前找,找到返回内容的索引,找不到返回-1;

 

slice(n,m)       从索引n 查找到索引m  但不包括m,slice可以取负值

 

substring(n,m)      从索引n 查找到索引m ,但不包括m, 不可以取负值

 

substr(n,m)      从索引n开始截取m 个

 

split(切割形式)       把一个字符串分割成字符串数组。

 

toUpperCase()      转大写字母

 

toLowerCase()       转小写字母

 

3.Math对象

Math.floor()        向下取整

 

Math.ceil()         向上取整

 

Math.random()      取0-1之间的随机小数

 

Math.round()     四舍五入

 

Math.abs()      取绝对值

 

Math.pow(x,y)      x的y次幂  

 

Math.sqrt()     开平方

 

Math.max()      取最大值

 

Math.min()      取最小值

 

4.Date日期对象

new Date()      创建一个日期对象

 

getFullYear()      返回年份

 

getMonth()      返回月份数(0-11),想要得到几月,需要加一

 

getDay()      返回一周的第几天(0-6),想要得到星期几,需要加一

 

getDate()      返回日

 

getHours()      返回时

 

getMinutes()      返回分

 

getSeconds()      返回秒

 

getTime()      返回从1970年1月1日00:00到现在的毫秒数(格林尼治时间),也就是时间戳

 

setYear(yearInt)       设置年份.2位数或4位数


setFullYear(yearInt)      设置年份.4位数

 

setMonth(monthInt)       设置月份(0-11)


setDate(dateInt)       设置日(1-31)


setHours(hourInt)       设置小时数(0-23)


setMinutes(minInt)       设置分钟数(0-59)


setSeconds(secInt)       设置秒数(0-59)


setMilliseconds(milliInt)       设置毫秒(0-999)
JS Js的常用内置对象

[js] 写一个获取当前url查询字符串中的参数的方法

function parseQueryString(url) {
  let obj = {};
  let keyvalue = [];
  let paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
  for (let [index, elem] of paraString.entries()) {
    keyValue = elem.split("=");
    obj[keyValue[0]] = keyValue[1]
  }
  return obj;
}

parseQueryString(location.href)

如何获取浏览器URL中查询字符串的参数?

[js] 说说你对javascript的作用域的理解

ES5:函数作用域和全局作用域(按名字理解就行)

注意:js在查找变量时,都是从下级作用域往上级作用域查找的,如果一直到顶级作用域(全局作用域)都没找到,则报错。

ES6新增:块级作用域 (如for(let i=o;i<n:i++){//i在这个块里起作用})

原生js之理解作用域

[js] 什么是闭包?优缺点分别是什么?

什么是闭包

闭包就是能够读取其他函数内部变量的函数,说白了闭包就是个函数,只不过是处于其他函数内部而已。

由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。

所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

知乎大神说:闭包是指在 JavaScript 中,内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。

子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

用途是什么

1.访问函数内部的变量

2.防止函数内部的变量执行完城后,被销毁,使其一直保存在内存中。

写一个关于闭包的例子:

function outer(x) {
// 参数相当于局部的变量
    function inner(y) {
       console.log(x + y);
}
   return inner;
}
var closure = outer(3);
closure(7); // 输出10

inner函数把自己内部的语句,和自己在声明时所处的作用域一起封装成了一个密闭的环境,我们就称之为闭包。

函数本身就是一个闭包,函数在定义的时候,就能记住自己的外部环境和内部语句,每次执行的时候,会参考定义时的密闭环境。

使用闭包的注意点

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值