前端經典面試題-代碼

一、檢測變量類型。web

// 此方法不只可檢測出6種基本數據類型,還能檢測出Array、Function
Object.prototype.toString.call(Array)
// '[object Array]'

二、去除字符串中的空格,可以使用trim()方法或正則表達式。正則表達式

// trim()用於去除字符串左右兩端的全部空格
// trimLeft()、trimRight()用於去除字符串左邊和右邊的空格
'   today is Monday   '.trim()  // "today is Monday"
'   today is Monday   '.trimLeft()  // "today is Monday   "
// 使用正則表達式和replace方法能夠去除全部空格
// 注意replace方法默認只能替換一次,所以正則表達式需加g修飾符完成所有替換
'   today is Monday   '.replace(/\s*/g,'')  // "todayisMonday"
'   today is Monday   '.replace(/^\s*|\s*$/g,'')  // "today is Monday"

三、獲取URL中的參數。數組

function getUrlParam(sUrl, sKey) {
    var reg = /[?&](\w+)=(\w+)/g // 正則表達式
    var obj = {}
    while(reg.exec(sUrl)) // 每次匹配結果返回一個數組,RegExp.$1表示第一個子表達式的匹配,即key
        obj[RegExp.$1]? obj[RegExp.$1] = [].concat(obj[RegExp.$1],RegExp.$2):obj[RegExp.$1] = RegExp.$2
    return sKey? obj[sKey]||'':obj
}

四、把字符串轉換爲化成駝峯格式,如-webkit-border-image 轉換後的結果爲 webkitBorderImage。函數

// 注意(?!^)的使用,表示不以……開頭
// replace方法的第二個參數爲函數,函數的a表示完整匹配,b、c表示匹配到的子表達式
function convertToUpper(str){
    return str.replace(/(?!^)-(\w)(\w+)/g, function(a,b,c){
        return b.toUpperCase()+c.toLowerCase()
    }).replace(/-/g,'')
}

五、數組去重,可使用IndexOf方法或利用對象的key不能重複的特性來作。spa

// 建立一個新數組,經過判斷索引的方法去重,元素不存在時,indexOf返回-1
function arryUniq(arr){
    var uniq = []
    arr.forEach(function(item){
        if(uniq.indexOf(item) < 0){
            uniq.push(item)
        }
    })
    return uniq
}
// 對象的key值不能重複
function arryUniq(arr){
    var obj = {}
    var uniq = []
    arr.forEach(function(item){
        if(!obj[item]){
            obj[item] = true
            uniq.push(item)
        }
    })
    return uniq
}

 六、時間格式化,formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')prototype

function formatDate (date, fmt) {
  if (/(y+)/.test(fmt)) {
    // RegExp.$1表示與正則表達式匹配的第一個子表達式
    // 年比較特殊,單獨計算。
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + ''))
    let o = {
      'M+': date.getMonth()+1,
      'd+': date.getDate(),
      'H+': date.getHours(),
      'm+': date.getMinutes(),
      's+': date.getSeconds(),
      'w': ['日', '一', '二', '三', '四', '五', '六'][date.getDate()]
    }
    for (let k in o) {
      if (new RegExp(`(${k})`).test(fmt)) {
        let str = o[k] + ''
        // 若是默認的日期格式是1位,則直接顯示,不然加0
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : (('00' + str).substr(str.length)))
      }
    }
  }
  return fmt
}
formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')

 七、計算字符串中各字符出現的次數(空格除外),並找出出現次數最多的字符。code

// 計算字符串中每一個字母出現的次數,並找出出現次數最多的字母
function countStr(str){
    var max = 0 //定義變量存放最屢次數
    var maxStr = '' // 定義變量存放出現次數最多的字符
    var obj = {} // 定義對象存放字符和出現的次數
    for(var i in str){
        // 不計算空格字符
        if(str[i] === ' ') continue
        obj[str[i]] = obj[str[i]]? obj[str[i]]+=1:obj[str[i]]=1    
        if(obj[str[i]] > max){
            max = obj[str[i]]
            maxStr = str[i]
        }
    }
    console.log('出現最多的字符爲',`${maxStr}:${max}`)
    return obj
}
相關文章
相關標籤/搜索