`
wx1568908808
  • 浏览: 31359 次
文章分类
社区版块
存档分类
最新评论

JavaScript技巧

 
阅读更多

计算数组的极值

function smallest(array){                         
  return Math.min.apply(Math, array);             
}                                                 

function largest(array){                          
  return Math.max.apply(Math, array);             
}  

smallest([0, 1, 2.2, 3.3]); // 0

largest([0, 1, 2.2, 3.3]); // 3.3

迭代arguments

function useCall() {
    [].forEach.call(arguments, function(val, key) {
        console.log(key, val)
    });
}

useCall('Bob Dylan', 'Bob Marley', 'Steve Vai');

//0 "Bob Dylan"
//1 "Bob Marley"
//2 "Steve Vai"

将arguments转为数组

function transformToArray(arg){
  return Array.prototype.slice.call(arg);
}

Array.prototype.forEach()第二个参数

参考:MDN

var coder = {
  name: 'Shock',
  friends: ['Rocky', 'Bob'],
  logHiToFriends:function(){
    'use static'
    this.friends.forEach(function(friend){
      console.log(this.name+ ' say hi to '+ friend);
    },this)//注意这个this,如果不添加这个参数,你可以猜测会发生什么
  }
}

随机生成字母和数字组合的字符串

Math.random().toString(36).substr(2);
//un80usvvsgcpi0rffskf39pb9
//02aoe605zgg5xqup6fdclnb3xr
//ydzr1swdxjg3yolkb95p14i

使用IIFE解决循环问题

unexpected:

var funcs = [];

for (var i = 0; i < 10; i++) {
    funcs.push(function() { console.log(i); });
}

funcs.forEach(function(func) {
    func();     // 输出数值 "10" 十次
});

expected:

var funcs = [];

for (var i = 0; i < 10; i++) {
    funcs.push((function(value) {
        return function() {
            console.log(value);
        }
    }(i)));
}

funcs.forEach(function(func) {
    func();     // 从 0 到 9 依次输出
});

使用let解决循环问题

这是let独有的特性(参考)

var funcs = [];

for (let i = 0; i < 10; i++) {
    funcs.push(function() {
        console.log(i);
    });
}

funcs.forEach(function(func) {
    func();     // 从 0 到 9 依次输出
})

判断两个小数是否相等

//因为javascript数字通常被输入为十进制的浮点数,但内部却被表示为二进制,所以计算结果会有偏差:

0.1 + 0.2 //0.30000000000000004

0.1 + 1 - 1 //0.10000000000000009

0.1 + 0.2 === 0.3 //false

//所以我们不应该直接比较非整数,而是取其上限,把误差计算进去
//这样一个上限称为 machine epsilon,双精度的标准epsilon值是2^-53

const EPSILON = Math.pow(2, -53); //1.1102230246251565e-16

function epsEqu(x,y) {
  return Math.abs(x - y) < EPSILON;
}

epsEqu(0.1+0.2, 0.3) //true

Math.round函数的坑

Math.round(-3.2) //-3

Math.round(-3.5) //-3(这个就奇怪了)

Math.round(-3.8) //-4

//其实,Math.round(x)等同于:
Math.floor(x + 0.5)

巧用||和&&

var bar = $ || 233;
//如果$存在,则把$赋值给bar;如果$不存在,则把233赋值给bar

$ === undefined && (window.$ =  jQuery);  
//如果$不存在,则把jQuery赋值给window.$;如果$存在,则不执行后面的表达式

使用break + labels退出循环

function findNumber(arr){
  loop:{
    for (var i = 0; i < arr.length; i++) {
      if(arr[i]%2 == 0){
        break loop;//表示退出loop区块
      }
    }
    console.log(arr);//这句代码是不会执行的,如果上面只是break,for循环之后的代码还是会执行
  }
}

findNumber([1,3,5,6]);

简单实现合并对象

function merge(root){
  for (var i = 1; i < arguments.length; i++) {
    for (var key in arguments[i]) {
      if (object.hasOwnProperty(key)) {
        root[key] = arguments[i][key];
      }
    }
  }
  return root;
}

var merged = merge(
  {name:'Shock'},
  {city:'Shenzhen'}
)//{name:'Shock',city:'Shenzhen'}

理解map和parseInt

['1','2','3'].map(parseInt);
//[1, NaN, NaN]

['1','2','3'].map(function(x){return parseInt(x,10)});
//[1, 2, 3]

上传图片预览功能

<input type="file" name="file" onchange="showPreview(this)" />
<img id="portrait" src="" width="70" height="75">
function showPreview(source) {
  var file = source.files[0];
  if(window.FileReader) {
      var fr = new FileReader();
      fr.onloadend = function(e) {
        document.getElementById("portrait").src = e.target.result;
      };
      fr.readAsDataURL(file);
  }
}

微信内部修改document.title

function setTitle(title) {
  document.title = title;
  if (/ip(hone|od|ad)/i.test(navigator.userAgent)) {
    var i = document.createElement('iframe');
    i.src = '/favicon.ico';
    i.style.display = 'none';
    i.onload = function() {
      setTimeout(function(){
        i.remove();
      }, 9)
    }
    document.body.appendChild(i);
  }
}

setTitle("要修改的标题");

快速克隆一个对象

var Rocker = function(name, age){
  this.name = name,
  this.age = age
}

var shock = new Rocker('Shock', 24);

shock.age = 99;

var cloneShock = Object.create(shock);

cloneShock.name // "Shock"
cloneShock.age // 99

//在不支持ES5的浏览器下,实现create方法如下:

Object.create = Object.create || function(obj){
  var F = function(){};
  F.prototype = obj;

  return new F();
}

判断一个值是否是对象

function isObject(value){
  return value === Object(value);
}

isObject({}); // true
isObject(123);  // false

为构造器模拟apply功能

if(!Function.prototype.construct){
  Function.prototype.construct = function(argArray){
    if(!Array.isArray(argArray)){
      throw new TypeError("Arguments must be an array");
    }
    var constr = this;
    var nullaryFunc = Function.prototype.bind.apply(
      constr,[null].concat(argArray));
    return new nullaryFunc();
  }
}

//使用:
Date.construct([2017, 02, 14]); //  Tue Mar 14 2017 00:00:00 GMT+0800 (CST)

转载于:https://my.oschina.net/Tongyingcheng/blog/837687

分享到:
评论

相关推荐

    javascript技巧精心收集

    "javascript技巧精心收集"这个主题包含了一系列关于JavaScript编程的实用技巧和资源,旨在帮助开发者提升技能和效率。以下是一些从提供的文件名中提炼出的关键知识点: 1. **jsp技巧.txt**:这可能涉及到JavaServer...

    JavaScript技巧200多个

    这个名为"JavaScript技巧200多个"的资源显然包含了大量实用的编程技巧,可以帮助开发者提升JavaScript编程效率和代码质量。以下是一些可能包含在JS技巧200个.txt文件中的关键知识点: 1. **变量声明与作用域**:...

    javascript技巧(珍藏版)

    ### JavaScript技巧(珍藏版) 在本篇珍藏已久的JavaScript技巧分享中,我们将深入探讨一些实用且高效的JavaScript小技巧,这些技巧旨在帮助新手快速提升编程技能,并为日常开发带来便利。 #### 技巧1:类型转换 在...

    早该知道的7个JavaScript技巧

    以下是你需要了解的7个JavaScript技巧: 1. **简洁写法创建对象和数组**: 在JavaScript中,创建对象的传统方式是使用`new Object()`并逐个添加属性,而简洁写法允许你直接使用大括号 `{}` 来定义对象,如`var car...

    40种网站常用Javascript技巧

    根据提供的文件信息,我们可以归纳总结出40种网站常用的JavaScript技巧中的部分知识点。这些技巧主要应用于网页开发中,用于增强用户体验、实现特定功能或优化页面性能。下面将详细阐述每一点涉及的技术细节。 ### ...

    40种JAVASCRIPT技巧大全

    本文将围绕“40种JavaScript技巧大全”这一主题,深入探讨JavaScript的一些核心技巧,帮助开发者提升技能水平。 1. **变量与数据类型**:理解JavaScript中的var、let和const关键字,以及它们在作用域和变量提升上的...

    收集的javascript 技巧

    ### JavaScript技巧与方法详解 #### 引言 在IT领域,JavaScript作为一种被广泛使用的脚本语言,其在网页开发中的地位不可撼动。无论是前端开发还是后端Node.js的应用,JavaScript都扮演着至关重要的角色。本文旨在...

    javascript技巧

    ### JavaScript技巧详解 #### 一、JavaScript控制页面控件隐藏与显示 在Web开发中,经常需要通过JavaScript来控制页面上元素的隐藏与显示。这不仅能够提高用户体验,还能够帮助开发者实现更复杂的动态效果。 **...

    百例JavaScript技巧

    "百例JavaScript技巧"这个主题覆盖了各种实用的JavaScript编程技巧,旨在帮助开发者提升技能,提高工作效率。以下是根据这个主题可能会涵盖的一些关键知识点: 1. **基础语法**:JavaScript的基础包括变量声明(var...

    JavaScript技巧之如何实现鼠标跟随文字.pdf

    JavaScript技巧之如何实现鼠标跟随文字.pdf 本文将详细介绍如何使用JavaScript实现鼠标跟随文字的效果,该效果可以在网页上显示一行文本,并跟随鼠标的移动。 标题解释 "JavaScript技巧之如何实现鼠标跟随文字"是...

    Javascript 技巧

    在"很炫的哦"这个标签下,我们可以期待一些创新且引人入胜的JavaScript技巧。下面,我们将深入探讨一些JavaScript的核心知识点,以及如何利用这些技巧提升你的编程技能。 1. **DOM操作**:JavaScript与HTML文档对象...

    JavaScript技巧收集(200多个)

    【JavaScript 技巧收集(200 多个)】是...以上是JavaScript技巧收集的一部分,它们展示了JavaScript在网页交互、样式控制和用户体验提升方面的强大能力。掌握这些技巧可以帮助开发者创建更富于互动性和吸引力的Web应用。

    JavaScript技巧收集.7z

    这个"JavaScript技巧收集.7z"压缩包很可能是包含了一系列关于JavaScript编程的实用技巧、代码片段或者示例项目。尽管没有具体的标签提供额外信息,我们可以从常见的JavaScript知识点出发,来探讨一些重要的概念和...

    javascript技巧(javascript调用C#方法)个人学习笔记

    javascript技巧(javascript调用C#方法) 个人笔记

    JavaScript Array对象详解-javascript技巧.pdf

    JavaScript Array对象详解_javascript技巧

    Javascript技巧大集合时间.htm )

    Javascript技巧大集合时间.htm ) Javascript技巧大集合时间.htm ) Javascript技巧大集合时间.htm )

    18个JavaScript技巧:编写简洁高效的代码.pdf

    ### JavaScript技巧概览 本文将深入探讨《18个JavaScript技巧:编写简洁高效的代码》PDF文档中提及的一些关键技巧,并详细解释每个技巧的实际应用及背后原理。这些技巧旨在帮助开发者提高代码质量和效率。 #### 1....

Global site tag (gtag.js) - Google Analytics