字符串与JSON

1、使用数组拼接出如下字符串

var prod = {
    name: '女装',
    styles: ['短款', '冬季', '春装']
};
function getTpl(data){
  var arr = ['<dl class="product">']
  arr.push('<dt>'+data.name+'</dt>')
  for ( var i = 0; i < data.styles.length; i++){
    arr.push('<dd>' + data.styles[i] + '</dd>')
  }
  arr.push('</dl>')
  console.log(arr.join(''))
  return (arr.join(''))
};
var result = getTpl(prod);  //result为下面的字符串
<dl class="product">
    <dt>女装</dt>
    <dd>短款</dd>
    <dd>冬季</dd>
    <dd>春装</dd>
</dl>

2、写出两种以上声明多行字符串的方法

例如:

var str = 'abcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancde'
这段字符串很长,如何多行优雅的显示

  • 方法一:
var str = 'abcde'
+'abcde'
+'abcde'
+'abcde'
+'abcde'
  • 方法二:
var str= 'abcde\
abcde\
abcde\
abcde\
abcde\
abcde'

3、补全如下代码,让输出结果为字符串: hello\饥人谷

var str ='hello\\'+'\\饥人谷' //补全代码
console.log(str)
var str ='hello\\\\饥人谷' //补全代码
console.log(str)

4、以下代码输出什么?为什么

var str = 'jirengu\nruoyu'
console.log(str.length)//13\n是一个字符表示换行

5、写一个函数,判断一个字符串是回文字符串,如 abcdcba是回文字符串, abcdcbb不是

var str = 'abcdcba'
function palindrome(str){
return str === str.split("").reverse().join();
}
console.log(palindrome(str))

6、写一个函数,统计字符串里出现出现频率最多的字符

var str = 'sldjfld jsjfoisdjfdffffffffffffffffffffffffffffffffffffsfkds lsdjfoisdjfosdhfdlgsjosjf lsjfsufoiwjhfhg dss lsdjfls'
function frequency(str){
var obj = {}
for ( var i = 0 ; i < str.length; i++){
  if (obj[str[i]]){
       ++obj[str[i]]
  }else{
  obj[str[i]] = 1
  }
}
var max = 0,
      moststr
for(var key in obj){
  if ( obj[key] > max ){
    max = obj[key]
    moststr = key
  }
  }
console.log(moststr+':'+max)
}
frequency(str)

7、写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串,如

function camelize(str){
var arr = str.split('')
console.log(arr)
  for( var i = 0; i < arr.length; i++){
console.log(arr.length)
    if ( arr[i] === "-" ){
     arr.splice( i ,1)
     arr[i] = arr[i].toUpperCase()
     i--
     console.log(arr)
    }
}
console.log(arr.join(''))
return arr.join('')
}
camelize("background--color") == 'backgroundColor'
camelize("list-style--image") == 'listStyleImage'

8、写一个 ucFirst函数,返回第一个字母为大写的字符 (***)

function ucFirst(str){
var arr = str.split('')
arr[0] = arr[0].toUpperCase()
return arr.join('')
}
ucFirst("hunger") == "Hunger"

9、写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...,如

function truncate(str,maxlength){
  if ( str.length > maxlength ){
    str = str.substr(0,maxlength) + '...'
}
console.log(str)
return str
}
truncate("hello, this is hunger valley,", 10) == "hello, thi...";
truncate("hello world", 20) == "hello world"

10、什么是 JSON格式数据?JSON格式数据如何表示对象?window.JSON 是什么?

JSON格式(JavaScript Object Notation的缩写)是一种用于数据交换的文本格式,2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式。

相比XML格式,JSON格式有两个显著的优点:书写简单,一目了然;符合JavaScript原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON迅速被接受,已经成为各大网站交换数据的标准格式,并被写入ECMAScript 5,成为标准的一部分。
JSON对值的类型和格式有严格的规定。

  • 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
  • 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能-
  • 使用NaN, Infinity, -Infinity和undefined)。
  • 字符串必须使用双引号表示,不能使用单引号。
  • 对象的键名必须放在双引号里面。
  • 数组或对象最后一个成员的后面,不能加逗号。

JSON格式数据如何表示对象?

  • 对象用{}表示
  • 键值对之间用“,”分隔
  • 键名跟键之间用‘:’分隔,值可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)
  • 字符串必须使用双引号表示,不能使用单引号。
  • 对象的键名必须放在双引号里面。
  • 对象最后一个成员的后面,不能加逗号

以下是合格的JSON值。

["one", "two", "three"]

{ "one": 1, "two": 2, "three": 3 }

{"names": ["张三", "李四"] }

[ { "name": "张三"}, {"name": "李四"} ]

以下是不合格的JSON值。

{ name: "张三", 'age': 32 }  // 属性名必须使用双引号

[32, 64, 128, 0xFFF] // 不能使用十六进制值

{ "name": "张三", "age": undefined } // 不能使用undefined

{ "name": "张三",
  "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
  "getName": function() {
      return this.name;
  }
} // 不能使用函数和日期对象

需要注意的是,空数组和空对象都是合格的JSON值,null本身也是一个合格的JSON值。
window.JSON是全局对象,用于判断浏览器是否兼容JSON的用法。

11、如何把JSON 格式的字符串转换为 JS 对象?如何把 JS对象转换为 JSON 格式的字符串?

JSON.parse()

将一个字符串解析为JSON,可选地转换生成的值及其属性,并返回值。
JSON.stringify()

返回与指定值相对应的一个JSON字符串,可选地仅包含某些属性或以用户定义的方式替换属性值。

推荐阅读更多精彩内容