JavaScript自用入门


  • 2017.10.26 属性名和属性值获取

  获取js对象的所有属性的属性名数组,如获取obj的属性名数组:

var propArr = Object.getOwnPropertyNames(obj).sort();

  另一种获取属性名:

for(attribute in obj){ 
    alert(attribute); 
} 

  获取属性名对应属性值:

for(attribute in obj){ 
    alert(obj[attribute]); 
} 

  • 2017.11.21 Snippets

    • 小数保留*位小数,整数保持整数
    //如果原来是整数等就取原来的整数,原始值为小数保留两位小数
    if (value.toString().split(".").length > 1) {
        value= value.toFixed(2)
    }
  • 时间戳格式化
//将时间戳格式化为yyyy-MM-dd hh:mm:ss形式
function formatDate(timestamp) {
    var date = new Date(timestamp);
    Y = date.getFullYear() + '-';
    M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    D = date.getDate() + ' ';
    h = date.getHours() + ':';
    // m = (date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes()) + ':';
    m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
    s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
    // var result = Y + M + D + h + m + s;
    var result = Y + M + D + h + m;
    return result;
}
  • generate sku table

var result = [];//组合成产品规格集
/* specResultList 
0:{id: 36, attrName: "容量", alias: null, classifyId: 11, propValues: Array(6), …}
1:{id: 43, attrName: "颜色", alias: null, classifyId: 11, propValues: Array(7), …}
2:{id: 69, attrName: "尺寸", alias: null, classifyId: 11, propValues: Array(12), …}

propValues
0:{id: 117, propValue: "锥形1500", propName: null, propNameId: 36, gmtDatetime: null, …}
1:{id: 118, propValue: "锥形1800", propName: null, propNameId: 36, gmtDatetime: null, …}
2:{id: 119, propValue: "锥形1000", propName: null, propNameId: 36, gmtDatetime: null, …}
3:{id: 231, propValue: "250ML", propName: null, propNameId: 36, gmtDatetime: "2017-09-19 18:59:08", …}
4:{id: 232, propValue: "350ML", propName: null, propNameId: 36, gmtDatetime: "2017-09-19 18:59:08", …}
5:{id: 233, propValue: "450ML", propName: null, propNameId: 36, gmtDatetime: "2017-09-19 18:59:08", …}
 */
//某分类下规格结果集合
var specResultList = [];

//根据规格集合生成sku笛卡尔积
function generate(index, current) {
    if (index < specResultList.length - 1) {
        var specItem = specResultList[index];
        var keya = specItem.attrName;
        var items = specItem.propValues;
        if (items.length == 0) {
            generate(index + 1, current);
        }
        for (var i = 0; i < items.length; i++) {
            if (!items[i]) continue;
            var newMap = {};
            newMap = $.extend(newMap, current);
            newMap[keya] = items[i];
            generate(index + 1, newMap);
        }

    } else if (index == specResultList.length - 1) {
        var specItem = specResultList[index];
        var keya = specItem.attrName;
        var items = specItem.propValues;
        if (items.length == 0) {
            result.push(current);
        }
        for (var i = 0; i < items.length; i++) {
            if (!items[i]) continue;
            var newMap = {};
            newMap = $.extend(newMap, current);
            newMap[keya] = items[i];
            result.push(newMap);
        }
    }
}
//生成sku表格,参数result为转化后的sku数组
function generateSkuTable(result) {
    if (result == null || result == undefined || result.length == 0)
        return;
    $(".sku-table").html("");
    //获取其下属性数组,举例格式为["大小", "容量", "颜色"]
    var propArr = Object.getOwnPropertyNames(result[0]).sort();
    console.log("propArr:", propArr);
    var skuTheadStr = "<thead>\n" +
        "                                                <tr>\n" +
        "                                                    <td class=\"thead-sku-id\" style=\"display: none\"></td>\n";
    for (var prop_p of propArr) {
        skuTheadStr += "<td class=\"thead-prop-name\">" + prop_p + "</td>\n";
    }
    skuTheadStr += "<td class=\"thead-sku-prop-str\" style=\"display: none\"></td>\n" +
        "<td class=\"thead-sku-prop-values\" style=\"display: none\"></td>\n" +
        "                                                    <td>商品图片</td>\n" +
        "                                                    <td>价格</td>\n" +
        "                                                    <td>库存</td>\n" +
        "                                                    <td width=\"80\">删除操作</td>\n" +
        "                                                </tr>\n" +
        "                                                </thead>";
    $(".sku-table").append(skuTheadStr);
    var skuTbodyStr = "        <tbody>\n";
    var tempSku = [];
    var zz = 0;
    console.log("result array for generate table:", result);
    for (tempSku of result) {
        zz++;
        skuTbodyStr += "<tr class=\"js-sku-content\">\n";
        skuTbodyStr += "<td class=\"td-sku-id\" style=\"display: none\"></td>\n";
        console.log(tempSku);
        var str = "";
        //要存储的属性字符串
        var prop_str = "";
        //要存储的属性值名组合(订单显示用)
        var prop_values = "";
        for (var prop_p of propArr) {
            var prop_pid = tempSku[prop_p].propNameId;
            var prop_vid = tempSku[prop_p].id;
            var prop_v = tempSku[prop_p].propValue;
            str += prop_p + ":" + prop_v + "::" + prop_pid + "-" + prop_vid + ",";
            prop_str += prop_pid + "-" + prop_vid + ",";
            prop_values += "、" + prop_v;
            skuTbodyStr += "<td class=\"td-prop-value\">" + prop_v + "</td>\n";
        }
        prop_values = prop_values.substr(1);
        console.log(str);
        console.log(prop_str);
        console.log(prop_values);
        var skuUrl = "";
        skuTbodyStr += "<td class=\"td-sku-prop-str\" style=\"display: none\">" + prop_str + "</td>\n" +
            "<td class=\"td-sku-prop-values\" style=\"display: none\">" + prop_values + "</td>\n" +
            " <td class=\"sku-url\" data-url=\"" + skuUrl + "\">" +
            "<div id='dz" + zz + "' data-url=\"\" class=\"sku-url-div dropzone\" name=\"file\">\n" +
            "                                    <div id='pr" + zz + "' class=\"dropzone-previews drop-preview\"></div>\n" +
            "                                    <a class=\"upload_sku_pic btn btn-inline btn-sm dz-message drop-a\">上传图片</a>\n" +
            "                                </div>" +
            "</td>" +
            "                                                    <td>\n" +
            "                                                        <div class=\"validator-form\">\n" +
            "                                                            <input custom-number=\"\" decimal=\"2\"\n" +
            "                                                                   class=\"form-control input-sm sku-price-input ng-pristine ng-untouched ng-isolate-scope ng-invalid ng-invalid-custom-number\"\n" +
            "                                                                   type=\"text\" name=\"sku_price\" value=\"\"\n" +
            "                                                                   style=\"\"></div>\n" +
            "                                                    </td>\n" +
            "                                                    <td>\n" +
            "                                                        <div class=\"validator-form\">\n" +
            "                                                            <input custom-number=\"\"\n" +
            "                                                                   class=\"form-control input-sm sku-stock-input ng-pristine ng-untouched ng-isolate-scope ng-invalid ng-invalid-custom-number\"\n" +
            "                                                                   type=\"text\" name=\"sku_inventory\" value=\"\"\n" +
            "                                                                   style=\"\"></div>\n" +
            "                                                    </td>\n" +
            "                                                    <td class=\"remove-a-sku\"><a placement=\"bottom\"\n" +
            "                                                                                maximize=\"true\"><i\n" +
            "                                                            class=\"fa fa-remove\"></i></a>\n" +
            "                                                    </td>\n" +
            "                                                </tr>\n";
    }
    skuTbodyStr += "</tbody>";
    $(".sku-table").append(skuTbodyStr);

    $(".sku-table input").validate();
    //为表格中每个图片上传处初始化dropzone设置
    initTableDropzone();
}
  • sku表格创建
//表格创建
$(document).on("change", '.sku_value', function () {
    var skuTypeArr = [];//存放SKU类型的数组
    var totalRow = 1;//总行数
    //获取所选规格数组
    skuTypeArr = getCkeckedSkuTypeArr(skuTypeArr, totalRow);

    /* skuTypeArr结果形如
     0:{attrName: "试试", propNameId: "26", propValues: Array(1), skuValueLen: 1}
     1:{attrName: "你好", propNameId: "24", propValues: Array(1), skuValueLen: 1}*/
    if (skuTypeArr.length == 0) {
        $(".sku-table").html("");
    } else {
        //已选规格集合
        specResultList = skuTypeArr;
        result = [];
        //做规格笛卡尔积,转化规格为多个sku
        generate(0, {});
        //生成sku表格
        generateSkuTable(result);
    }
});

  • 2017.11.27 获取页面宽度,设置字体大小


//获取页面宽度,设置字体大小

(function (doc, win) {
    var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            if (clientWidth < 750) {
                docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
            }
            else {
                docEl.style.fontSize = '100px';
            }
        };

    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
    //setTimeout轮询
    function showTime() {
        var today = new Date();
        alert("The time is: " + today.toString());
        //每2秒执行一次,showTime()
        if(xxx){
            setTimeout("showTime()", 2000);
        }
    }

  • 2019.01.23 Snippet
//限制input位数和数字
oninput="if(value.length>6)value=value.slice(0,6);value=value.replace(/[^\d]/g,'')"

//小数
oninput="if(value.length>6)value=value.slice(0,6);value=value.replace(/[^\d\.]/g,'')"
    function timestampToTime(timestamp) {
        var date = new Date(timestamp );
        Y = date.getFullYear() + '-';
        M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
        D = (date.getDate()<10 ? '0'+date.getDate() : date.getDate()) + ' ';
        h = (date.getHours()<10 ? '0'+date.getHours() : date.getHours()) + ':';
        m = (date.getMinutes() <10 ? '0'+date.getMinutes() : date.getMinutes())+ ':';
        s = date.getSeconds()<10 ? '0'+date.getSeconds() : date.getSeconds();
        return Y+M+D+h+m+s;
    }
 objPropertyRecursively2String(obj) {
                //循环将obj中的数字类型值转为字符串类型
                for (var prop in obj) {
                    if (judgeArrObj(obj[prop])) {
                        vm.objPropertyRecursively2String(obj[prop]);
                    } else if (Object.prototype.toString.call(obj[prop]) === '[object Number]') {
                        obj[prop] = this.convert2String(obj[prop])
                    }
                }
                return obj;

                function judgeArrObj(it) {
                    return !!(Object.prototype.toString.call(it) === '[object Object]' || Object.prototype.toString.call(it) === '[object Array]')

                }
            },
            convert2String(value) {
                if(value){
                    console.log("value:",value)
                    console.log("valueStr:",value.toString())
                    return value.toString();
                }else{
                    return "";
                }
            }
   if (openInWebview()) {
                // 在app内打开
                window.postMessage("{\"type\" : \"toLogin\"}","*");
            } else {
                // 其他地方
            }
            
// 判断是否在Webview打开
function openInWebview () {
    var ua = navigator.userAgent.toLowerCase()
    if (ua.match(/MicroMessenger/i) == 'micromessenger') { // 微信浏览器判断
        return false
    } else if (ua.match(/QQ/i) == 'qq') { // QQ浏览器判断
        return false
    } else if (ua.match(/WeiBo/i) == "weibo") {
        return false
    } else {
        if (ua.match(/Android/i) != null) {
            return ua.match(/browser/i) == null
        } else if (ua.match(/iPhone/i) != null) {
            return ua.match(/safari/i) == null
        } else {
            return (ua.match(/macintosh/i) == null && ua.match(/windows/i) == null)
        }
    }
}

  • Service Worker
 Service workers也可以用来做这些事情:

后台数据同步
响应来自其它源的资源请求
集中接收计算成本高的数据更新,比如地理位置和陀螺仪信息,这样多个页面就可以利用同一组数据
在客户端进行CoffeeScript,LESS,CJS/AMD等模块编译和依赖管理(用于开发目的)
后台服务钩子
自定义模板用于特定URL模式
性能增强,比如预取用户可能需要的资源,比如相册中的后面数张图片
未来service workers能够用来做更多使web平台接近原生应用的事。 值得关注的是,其他标准也能并且将会使用service worker,例如:

后台同步:启动一个service worker即使没有用户访问特定站点,也可以更新缓存
响应推送:启动一个service worker向用户发送一条信息通知新的内容可用
对时间或日期作出响应
进入地理围栏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值