javascript——常用基础API部分方法、面试题集合
javascript——常用基础API部分方法(函数)集合
字符串转化成驼峰表示法
将字符串foo="get-elment-by-id"转化成驼峰表示法"getElementById"
function combo(msg) {
// 分割成字符串数组
var arr = msg.split("-");
// 从数组第二位开始遍历,首字母改为大写
for (var i = 1; i < arr.length; i++) {
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1, arr[i].length - 1);
}
// 组合成字符串
msg = arr.join("");
return msg;
}
combo("get-elment-by-id"); // getElmentById
统一日期格式 YYYY-MM-DD
以 YYYY-MM-DD 的方式,输出今天的日期
var d = new Date();
var year = d.getFullYear();
// 获取月份,记得加一
var month = d.getMonth() + 1;
// 10以下变成两位
month = month < 10 ? '0' + month : month;
var day = d.getDate();
// 10以下变成两位
day = day < 10 ? '0' + day : day;
console.log(year + '-' + month + '-' + day); // 2020-02-29
特殊字符转义
为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数 escapeHtml,将<, >, &, “进行转义
function escapeHtml(str) {
return str.replace(/[<>"&]/g, function (match) {
switch (match) {
case "<":
return "<";
case ">":
return ">";
case "&":
return "&";
case "\"":
return """;
}
});
}
escapeHtml("<div>"); // <div>
生成几个不同的随机数
生成 5 个不同的随机数,每生成一次就和前面的所有数字相比较,如果有相同的,则放弃当前生成的数字
var num1 = [];
for (var i = 0; i < 5; i++) {
// 生成随机数,范围是 [1, 10]
num1[i] = Math.floor(Math.random() * 10) + 1;
for (var j = 0; j < i; j++) {
// 如果重复,重新进行本次循环
if (num1[i] == num1[j]) {
i--;
}
}
}
console.log(num1); // 随机数组 [9, 1, 7, 10, 6]
范围内随机选取一组数字
用 js 实现随机选取 10–50之间的 10 个数字,存入一个数组,并排序。
function randomNub(aArray, len, min, max) {
// 不符合条件
if (len >= (max - min)) {
return '超过' + min + '-' + max + '之间的个数范围' + (max - min - 1) + '个的总数';
}
// 达到数量后排序
if (aArray.length >= len) {
aArray.sort(function (a, b) {
return a - b
});
return aArray;
}
// 生成随机数
var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);
// 防止重复
for (var j = 0; j < aArray.length; j++) {
if (nowNub == aArray[j]) {
randomNub(aArray, len, min, max);
return;
}
}
aArray.push(nowNub);
// 递归循环
arguments.callee(aArray, len, min, max);
return aArray;
}
var arr = [];
randomNub(arr, 10, 10, 50); // 随机数组[20, 26, 28, 29, 30, 35, 40, 41, 44, 49]
提取URL中的各个GET参数
有这样一个 URL:http://item.taobao.com/item.htm?a=1&b=&c=xxx&d,请写一段 JS 程序提取 URL中的各个 GET 参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中
function serilizeUrl(url) {
var urlObject = {};
// 是否有'?'
if (/\?/.test(url)) {
// 截取'?'以后的字符串,也可结合location对象获取
var urlString = url.substring(url.indexOf("?") + 1);
// 分割成字符串数组 ['a=1', 'b=', 'c=xxx', 'd']
var urlArray = urlString.split("&");
// 遍历 再次分割 [['a', '1'], ['b', ''], ['c', 'xxx'], ['d']]
for (var i = 0, len = urlArray.length; i < len; i++) {
var urlItem = urlArray[i];
var item = urlItem.split("=");
urlObject[item[0]] = item[1];
}
return urlObject;
}
return null;
}
var url = "http://item.taobao.com/item.htm?a=1&b=&c=xxx&d";
serilizeUrl(url); // {a: "1", b: "", c: "xxx", d: undefined}
清除字符串前后的空格
写一个 function,清除字符串前后的空格。(兼容所有浏览器)
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+/, "").replace(/\s+$/, "");
}
}
var str = " \t\n test string ".trim();
console.log(str == "test string"); // true
统计出现最多的字符
判断一个字符串中出现次数最多的字符,统计这个次数
// 保存出现的字符并计次数
var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
if (!json[str.charAt(i)]) {
json[str.charAt(i)] = 1;
} else {
json[str.charAt(i)]++;
}
};
// 查询出现次数最多的字符
var iMax = 0;
var iIndex = '';
for (var i in json) {
if (json[i] > iMax) {
iMax = json[i];
iIndex = i;
}
}
console.log('出现次数最多的是:' + iIndex + ',出现' + iMax + '次');
获取非行间样式
写一个获取非行间样式的函数
function getAttr(obj, attr) {
var style;
if (obj.currentStyle) { //当有这个属性的时候currentStyle
style = obj.currentStyle[attr]; //兼容IE
}
else {
style = getComputedStyle(obj, false)[attr]; //主流浏览器
}
return style;
}
var box = document.getElementById('box');
getAttr(box, 'width'); // 200px
数字转化成RMB形式
// 转换成字符串并反转
function re(str) {
str += '';
return str.split("").reverse().join("");
}
// 转换为RMB格式
function toRMB(num) {
var tmp = '';
for (var i = 1; i <= re(num).length; i++) {
tmp += re(num)[i - 1];
if (i % 3 == 0 && i != re(num).length) {
tmp += ',';
}
}
return re(tmp);
}
toRMB(1234567); // 1,234,567
数组数字去重
用原型,去掉数组中重复的数字
Array.prototype.unique = function () {
var n = []; //一个新的临时数组
for (var i = 0; i < this.length; i++) //遍历当前数组
{
//如果当前数组的第 i 已经保存进了临时数组,那么跳过,
//否则把当前项 push 到临时数组里面
if (n.indexOf(this[i]) == -1) {
n.push(this[i]);
}
}
return n;
}
var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
arr.unique(); // [1, 2, 3, 4, 5, 6, 9, 25]
阶乘
原型方法
Number.prototype.N = function () {
var re = 1;
for (var i = 1; i <= this; i++) {
re *= i;
}
return re;
}
var num = 5;
num.N(); // 120
递归方法
function jc(n){
if(n<1) return 1;
return n*arguments.callee(n-1);
}
jc(5); // 120
计算字符串字节数
function strlen(s) {
if (!arguments.length || !s) return 0;
var len = 0;
for (var i = 0; i < s.length; i++) {
if (s.charCodeAt(i) > 255) len += 2; else len += 1; //charCodeAt()得到的是 unCode 码
} //汉字的 unCode 码大于 255bit 就是两个字节
return len;
}
strlen('哈哈123'); // 7
拆分字符串
specify(‘hello,world’)//=>’h,e,l,l,o,w,o,r,l,d’实现 specify 函数
function specify(str) {
var tempArray = Array.prototype.filter.call(str, function (value) {
return value >= 'A' && value <= 'z' && value != "_";
});
return tempArray.join(",");
}
specify("he____*(%$# !!!))))))llo,Wo@@@rld"); // h,e,l,l,o,W,o,r,l,d
FF 与 IE 中阻止事件冒泡
function stopPropagation(e) {
e = e || window.event;
if (e.stopPropagation) { //W3C 阻止冒泡方法
e.stopPropagation();
} else {
e.cancelBubble = true; //IE 阻止冒泡方法
}
}
用+-×÷和Math实现三目运算
只允许使用 + - * / 和 Math.* ,求一个函数 y = f(x, a, b);当 x > 100 时返回 a 的值,否则返回 b 的值,不能使用 if else 等条件语句,也不能使用|,?:,数组
function f(x, a, b) {
var temp = Math.ceil(Math.min(Math.max(x - 100, 0), 1));
return a * temp + b * (1 - temp);
}
f(10, 1, 2); // 2
arguments实现加法函数
写一个函数可以计算 sum(5,0,-5);输出 0; sum(1,2,3,4);输出 10;
function sum() {
var result = 0;
var len = arguments.length;
for (var i = 0; i < len; i++) {
var num = arguments[i];
if (typeof num == 'number') {
result += num;
}
}
return result;
}
sum(5,0,-5); // 0
sum(1,2,3,4); // 10
- 上一篇 »经典完整java面试题大全
- 下一篇 »php笔试面试题大全