Javascript 教程 在线

550JavaScriptWindowHistory

除此之外可以用 history.go() 这个方法来实现向前,后退的功能。
function a(){
    history.go(1);  // go() 里面的参数表示跳转页面的个数 例如 history.go(1) 表示前进一个页面
}
function b(){
    history.go(-1);  // go() 里面的参数表示跳转页面的个数 例如 history.go(-1) 表示后退一个页面
}

549JavaScriptMath(算数)

对于伪随机数,JS 有很多种玩法来生成我们所需要的伪随机数。

根据上下限生成随机数:

var rand = (min,max) => Math.round(Math.random()*(max-min))+min;
//Max为最大值,Min为最小值

根据概率随机生成 bool 值:

function randBool(percent=0.5){
  //percent为概率,默认0.5(50%)。
  if(Math.random()<percent)//如果随机数小于概率值,返回true,否则返回false。
    return true;
  else
    return false;
}

随机生成指定字符:

function randChar(length,characters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"){
  //length为所需长度,characters为所包含的所有字符,默认为字母+数字。
  characters=characters.split("");//分割字符。
  result="";//返回的结果。
  while(result.length<length) result+=characters[Math.round(Math.random()*characters.length)];
  return result;
}

随机生成字符的另一种玩法:

function randCharAnother(length,rangeMin=0x80,rangeMax=0x7FF){
  //length长度,rangeMin为最小Unicode码,rangeMax为最大Unicode码。
  result="";
  while(result.length<length) result+=String.fromCharCode(Math.round(Math.random()*(rangeMax-rangeMin))-rangeMin);
  return result;
}

随机从数组中取出一个东东:

Array.prototype.pick = function(){
  //不能为 ()=>{/*函数*/},否则this会指向Window。
  return this.length?Math.round(Math.random()*(this.length-1)):undefined;//如果长度为0,返回undefined。
}

548JavaScriptArray(数组)

数字索引与非数字索引

JavaScript 数组只支持数字索引,非数字索引指的是对象的属性了。

JavaScript 的数组可以看做是特殊的对象(object),对象的属性有两种表示方法。
var a=Object();
a.myattr="facesoho";
a["myattr"]="facesoho";

查看以下实例:

var a=new Array();
a['a1']=1;
a['a2']=2;
a.length  // 输出0

实例中由于你没有给数组的元素赋值,所以 a 数组的长度也没有被创建出来,此时 a.length 输出结果为 0。

var a=new Array();
a['a1']=1;
a['a2']=2;
a[2]=3;
a.length  // 输出3

在最后一行代码中数组元素 a[2] 赋值了,此时 JavaScript 会给数组 a 创建一个长度为 3 的空间,并在第三个元素中赋以3,但是元素1和元素2都没有赋值,所以此时a[0]和a[1]是没有值的。

如果要使用的是一个完全由“字符串下标”组成的数组,那还是将其声明为一个 Object 类型的对象要更好一些。

var a=new Array();
a['a1']=1;
a["100"]=3;
a.length  // 输出 101

Javascript 数组下标值的范围为 0 ~ 232。对于任意给定的数字下标值,如果不在此范围内,Javascript 会将它转换为一个字符串,并将该下标对应的值作为该数组对象的一个属性值而不是数组元素,例如 array[-1] = "yes" 其实就相当于给 array 对象添加了一个名为 -1 的属性,属性值为 yes。如果该下标值在合法范围内,则无论该下标值是数字还是数字字符串,都一律会被转化为数字使用,即 array["100"] = 0array[100] = 0 执行的是相同的操作。

547JavaScriptArray(数组)

Js 中为数组提供了多种遍历方式

const ary = ['a', 'b', 'c'];

// 最基本的方式, 只能遍历下标有序递增的数组
for (let i=0; i<ary.length; i++) {
  console.log(i, ary[i]);   // 0 a  1 b  2 c
}

// in:每遍历一次数组指针向后移动一位, 并得到当前数组元素值的下标, 可以通过 ary[key] 来访问数组元素值
for (let key in ary) {
  console.log(key, ary[key]);  // 0 a  1 b  2 c
}

// of:每遍历一次数组指针向后移动一位, 并得到当前数组元素的值, 处理二维数组时极为方便
for (let value of ary) {
  console.log(value);    // a b c
}

Js还为数组对象内置了多种迭代方法, 处理数组时极为方便

/**
 *  forEach(function)
 *  
 *  该方法接受一个函数作为参数, 该函数拥有两个参数, 分别为数组的值、键
 *  该方法没有返回值
 */

 ary.forEach((value, key) => {
    console.log(key, value); // 0 a  1 b  2 c
 })


/**
 * map(function)
 *  
 * 该方法接受一个函数作为参数, 该函数拥有两个参数, 分别为数组的值、键
 * 可以在传入的函数中返回相应的值,你每次迭代时返回的值会被map方法组装成一个新数组作为返回值返回
 */

 var result = ary.map((value, key) => {
    return value + '_facesoho.com';
 })

 console.log(result); // ['a_facesoho.com', 'b_facesoho.com', 'c_facesoho.com']

546JavaScriptArray(数组)

遍历一维数组: 依次访问数组中每个元素,对每个元素执行相同的操作

for(var i=0;i<arr.length;i++){
    arr[i]//当前正在遍历的元素
}

遍历关联数组: for in 循环

for(var key in hash){
    key//只是元素的下标名
    hash[key]//当前元素值
}

其实: js底层,一切对象都是关联数组:

比如: 索引数组,window等

遍历二维数组: 外层循环遍历行,内层循环遍历列

for(var r=0;r<arr.length;r++){
    for(var c=0;c<arr[r].length;c++){
        arr[r][c]//当前元素
    }
}