字符串 & Math & Date
2019-03-17 本文已影响0人
antimony
多行字符串的声明有哪几种常见写法?
字符串默认只能写在一行内,分成多行将会报错。
'a
b
c'
// SyntaxError: Unexpected token ILLEGAL
上面代码将一个字符串分成三行,JavaScript就会报错。
1.如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。
var longString = "Long \
long \
long \
string";
longString
// "Long long long string"
上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多行,效果与写在同一行完全一样。注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。
2.连接运算符(+)可以连接多个单行字符串,用来模拟多行字符串。
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
3.ES6 可以用 符号写多行字符串: var str =
你好
我是Aman
jianshu.com/u/4bcc49eef409
开启你的前端之路
`
以下代码 输出什么?
var str = 'C:\Users\Document\node\index.js'
console.log(str.length)
如何声明 str 让 console.log(str)输出 C:\Users\Document\node\index.js?
输出27,使用转义字符
var str = 'C:\\Users\\Document\\node\\index.js'
console.log(str)
第三题:对于字符串
var str = 'hello jirengu.com';
写出以下操作的代码范例
- 获取 str 下标为3的字符
str[3]
- 获取 str 下标为4的字符的 Ascii 码
console.log(str.charCodeAt(4));
- 截取字符g到末尾的字符串
var sub = str.substring(str.search('g'),str.length-1);
- 从字符o开始,截取长为4个字符的字符串
var sub = str.substr(str.search('o'),4);
- 获取第一个 l的下标
var index = str.search('i');
写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255。
function getRandIP(){
var ip =[];
for(var i = 0;i<4;i++) {
ip.push(Math.floor(Math.random()*255));
}
return ip.join('.');
}
var ip = getRandIP()
console.log(ip) // 10.234.121.45
写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff。
ffunction getRandColor(){
dict = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
color = [];
for(var i =0;i<6;i++){
color.push(dict[Math.floor(Math.random()*16)]);
}
return "#"+color.join("");
}
var color = getRandColor()
console.log(color) // #3e2f1b
写一个函数,返回从min到max之间的 随机整数,包括min不包括max 。
// 返回给定范围内的随机整数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
function getRandStr(len){
var a = '';
var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for(var i=0; i<10; i++){
a += dict[Math.floor(Math.random()*dict.length)];
}
return a;
}
var str = getRandStr(10); // 0a3iJiRZap
console.log(str);
写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:
- 刚刚( t 距当前时间不到1分钟时间间隔)
- 3分钟前 (t距当前时间大于等于1分钟,小于1小时)
- 8小时前 (t 距离当前时间大于等于1小时,小于24小时)
- 3天前 (t 距离当前时间大于等于24小时,小于30天)
- 2个月前 (t 距离当前时间大于等于30天小于12个月)
- 8年前 (t 距离当前时间大于等于12个月
function friendlyDate(time){
var delta_t = new Date() - time;
if(delta_t < 60*1000){
console.log('刚刚');
} else if(delta_t < 60*60*1000){
console.log(Math.floor(delta_t / (60*1000)) + '分钟前');
} else if(delta_t < 24*60*60*1000){
console.log(Math.floor(delta_t / (60*60*1000)) + '小时前');
} else if(delta_t < 30*24*60*60*1000){
console.log(Math.floor(delta_t / (24*60*60*1000)) + '天前');
} else if(delta_t < 12*30*24*60*60*1000){
console.log(Math.floor(delta_t / (30*24*60*60*1000)) + '个月前');
} else{
console.log(Math.floor(delta_t / (12*30*24*60*60*1000)) + '年前');
}
}
var str = friendlyDate(Date.now()-1999888);
var str2 = friendlyDate('1538822220220');
实现一个reduce函数,作用和原生的reduce类似下面的例子。
Ex:
var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6
实现:
function reduce(arr, iteratee, initValue){
var tmpArr = (initValue === undefined ? [] : [initValue]).concat(arr) //判断initValue是否为undefined
while(tmpArr.length > 1){
tmpArr.splice(0, 2, iteratee(tmpArr[0], tmpArr[1]))
}
return tmpArr[0]
}
var sum = reduce([3,5], function(v1, v2){
return v1 * v2
},4)
console.log(sum)
实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。
Ex::
flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];
解答:
function flatten(arr){
var newArr = []
function _flat(arr){
arr.forEach(val=>{
if(Array.isArray(val)){
_flat(val)
}else{
newArr.push(val)
}
})
}
_flat(arr)
return newArr
}
//高级写法
function enhancedFlatten(arr){
return arr.reduce(function(initArr, currentArr){
return initArr.concat(Array.isArray(currentArr)?flatten(currentArr):currentArr)
}, [])
}