字符串与JSON

作者: cccccccc7355608 | 来源:发表于2017-09-16 12:04 被阅读0次

    对于 HTTP 协议而言,HTML、CSS、JS、JSON 的本质都是什么

    都是符合 HTTP 协议通信格式的字符


    练习

    练习1

    var prod = {
        name: '女装',
        styles: ['短款', '冬季', '春装']
    };
    function getTpl(data) {
        var result = '<dl class="project"><dt>' + data.name + '</dt>';
        for (var i = 0; i < data.styles.length; i++) {
            result +='<dd>' + data.styles[i] + '</dd>';
        }
        result += '</dl>';
        return result;
    }
    var result = getTpl(prod);
    

    练习2 声明多行字符串

    var str = 'abcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancde'
    // 1
    var str = 'abcdeabcdeabc\
    deancdeabcde\
    abcdeabcdean\
    cdeabcdeabcd\
    eabcdeancdea\
    bcdeabcdeabc\
    deancde'
    console.log(str);
    // 2
    var str = 'abcdeabcdeabc' +
    'deancdeabcde' +
    'abcdeabcdean' +
    'cdeabcdeabcd' +
    'eabcdeancdea' +
    'bcdeabcdeabc' +
    'deancde';
    console.log(str)
    // 3
    (function () {/*
    abcdeabcdeabc
    deancdeabcde
    abcdeabcdean
    cdeabcdeabcd
    eabcdeancdea
    bcdeabcdeabc
    deancde
    */}).toString().split('\n').slice(1, -1).join('\n')
    /*
    "abcdeabcdeabc
    deancdeabcde
    abcdeabcdean
    cdeabcdeabcd
    eabcdeancdea
    bcdeabcdeabc
    deancde"
    */
    

    练习3

    var str = 'hello\\\\饥人谷';
    console.log(str) // => hello\\饥人谷
    

    练习4

    var str = 'jirengu\nruoyu'
    console.log(str.length) // => 13  \n 转义字符代表换行 占1 所以打印出 13
    

    练习5 判断回文字符

    function palindrome(str) {
        // if (str.length%2 === 0) { // 是偶数
        //  var _str = str.slice(0, str.length/2); // 前半部分
        //  var _substr = str.slice(str.length/2) // 后半部分
        //  console.log(_str);
        //  console.log(_substr);
            
        //  var _arr = _substr.split('') // 后半部分组成的数组
        //  if (_str === _arr.reverse().join('')) {
        //      return `是回文,字符长度是偶数`
        //  } else {
        //      return `不是回文,字符长度是偶数`
        //  }
        // } else { // 是奇数
        //  var _str = str.slice(0, (str.length+1)/2);
        //  var _substr = str.slice((str.length+1)/2);
        //  var _arr = _str.split('')
        //  _arr.pop()
        //  // console.log(_arr) 前半部分组成的数组
        //  var _arr = _arr.join('')
        //  console.log(_str) 
        //  console.log(_substr)
        //  if ( _arr === _substr.split('').reverse().join('')) {
        //      return `是回文,字符长度是奇数`;
        //  } else {
        //      return `不是回文,字符长度是奇数`;
        //  }
        // }
        // ↑ 多此一举
        var _str = str.split('').reverse().join('');
        if (str === _str) {
            return true;
        }
        return false;
    }
    palindrome("abaffddezeddffaba")
    

    练习6 统计出现频率最高的字符

    function count(str) {
        var newArr = {},
                count = 0,
                maxValue = [];
        for (var i = 0;i < str.length; i ++) {
            if (newArr[str[i]]) {
                ++newArr[str[i]]
            } else {
                newArr[str[i]] = 1;
            }
        }
        console.log(newArr)
        for (var key in newArr) {
            if (newArr[key] > count || newArr[key] === count) {
                Array.prototype.push.call(maxValue, key);
                count = newArr[key];
            }
        }
        console.log(maxValue, count);
    }
    count('abadsfasf12312213')
    // => ["1", "2", "a"] 3
    

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

    function camelize(str){
        var result = str.split('-')
        // console.log(result)
        for (var i = 1; i < result.length; i++){
            var _arr = result[i].split('')
            // console.log(_arr)
            _arr[0] = _arr[0].toUpperCase()
            // console.log(_arr)
            result[i] = _arr.join('');
            // console.log(result[i])
        }
        return result.join('');
    }
    camelize("list-style-image");
    // => listStyleImage
    

    练习8 写一个 ucFirst函数,返回第一个字母为大写的字符

    function ucFirst(str){
        var _str = str.split('');
        if (_str[0] === _str[0].toUpperCase()) return str;
        return `抱歉,您所输入的内容不包含大写字符`;
    }
    ucFirst("hunger") == "Hunger"
    ucFirst("Hunger") == "Hunger"
    //----------------------//
    function truncate(str, maxlength){
        if (str.length > maxlength) {
            var _substr = str.slice(0, maxlength)
            return _substr+"...";
        } else {
            return str;
        }
    }
    truncate("hello, this is hunger valley,", 10) == "hello, thi...";
    // => true
    truncate("hello world", 20) == "hello world"
    // => true
    

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

    JSON格式(JavaScript Object Notation)是一种用于数据交换的文本格式
    其对值得类型和格式有严格规定

    1. 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象
    2. 简单类型的值只有四种:字符串、数值(十进制)、布尔值和null(不能使用NaNInfinity-Infinityundefined
    3. 字符串必须使用双引号表示,不能使用单引号
    4. 对象的键名必须放在双引号里面
    5. 数组或对象最后一个成员的后面,不能加逗号
      例如
    ["one", "two", "three"]
    { "one": 1, "two": 2, "three": 3 }
    {"name": ["张三", "李四"] }
    [ { "name": "张三"}, { "name": "李四"} ]
    

    空数组和空对象都是合格的 JSON 值,null本身也是一个合格的 JSON 值

    window.JSON是ECMAScript 5为了检测对JSON的支持情况定义的一个原生的浏览器内置对象,其内置了JSON.parse()和JSON.stringify()方法

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

    JSON.parse方法用于将 JSON 字符串转化成对象

    JSON.parse('{}') // {}
    JSON.parse('true') // true
    JSON.parse('"foo"') // "foo"
    JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
    JSON.parse('null') // null
    
    var o = JSON.parse('{"name": "张三"}');
    o.name // 张三
    

    如果传入的字符串不是有效的 JSON 格式,JSON.parse方法会报错

    JSON.parse("'String'") // illegal single quotes
    // SyntaxError: Unexpected token ILLEGAL
    // 单引号字符串不符合 JSON 格式
    

    JSON.stringify方法用于将一个值转为字符串。该字符串符合 JSON 格式,并且可以被 JSON.parse方法还原

    JSON.stringify('abc') // ""abc""
    JSON.stringify(1) // "1"
    JSON.stringify(false) // "false"
    JSON.stringify([]) // "[]"
    JSON.stringify({}) // "{}"
    
    JSON.stringify([1, "false", false])
    // '[1, "false", false]'
    
    JSON.stringify({ name: "张三" })
    // '{"name": "张三"}'
    

    对于原始类型的字符串,转换结果会带双引号

    JSON.stringify('foo') === "\"foo\"" // true
    

    如果原始对象中,有一个成员的值是undefined、函数或 XML 对象,这个成员会被过滤

    var obj = {
      a: undefined,
      b: function () {}
    };
    JSON.stringify(obj) // "{}"
    

    如果数组的成员是undefined、函数或 XML 对象,它们都会被转成null,正则对象会被转成空对象
    JSON.stringify(/foo/) // "{}"
    JSON.stringify方法会忽略对象的不可遍历属性

    相关文章

      网友评论

        本文标题:字符串与JSON

        本文链接:https://www.haomeiwen.com/subject/qlpysxtx.html