zoukankan      html  css  js  c++  java
  • 类型

    类型

    • null, undefined, number, string, boolean, object, symbol
     typeof 的值永远返回的是一个字符串 
    
     typeof undefined  === 'undefined'
     typeof 42         === 'number'
     tyeeof 'good'     === 'string'
     typeof true       === 'boolean'
     typeof {}         === 'object'
     typeof Symbol()   === 'symbol'
     
     
     typeof null ==== 'object'
     那么应该如何判空呢?
    
    function fn(p1, p2, p3) {
        console.info(p1, p2, p3);
    }
    function fn(p1,p2) {
        console.info(p1,p2);
    }
    console.info(fn.length); // 3
    console.info(fn());
    
    函数的length属性表示该函数申明了几个形参
    

    undefined 与 undeclared

    • 变量已申明,但未赋值,则为undefined
    • 变量未声明,却使用,则为undeclared 未申明
    var a;
    console.info(a); // undefined
    
    console.info(b.c);  // Uncaught ReferenceError: b is not defined
    

    array, string, number是一个程序中最基本的组成部分

    数值-值

    • 稀疏数组:含有空白或者空缺单元的数组
    • 字符串键值能够被强制转换为十进制数值的话,就会被当做数值索引来处理
    var a = [];
    a[0] =1;
    a['good']=2;
    console.info(a.length);
    console.info(a[0]); //1
    console.info(a['good']); //2
    console.info(a); // [ 0: 1, 'good': 2, length : 1]
    
    a['0'] = 'good-name'; // 会覆盖以上的 a[0] = 1;
    
    以上: 建议数组还是通过存放数值索引值来存储
    
    • Array-like转换
       function array-like() {
       	var arr = Array.prototype.slice.call(arguments);
       	return arr;
       }
       
       ES6
       var arr = Array.from(arguments);
       
    

    字符串-值

    字符串逆序; 通过array的reverse函数实现; 不适用unicode编码的文本数据
    
    var a = 'hello world';
    var reversA = a.split("").reverse().join("");
    console.info(reversA);
    
    

    数字-值

    • 常用方法
    • toFixed(number) ; 指定小数点后几位数值 number must be between 0 and 100 !!!返回结果为string
    • toPrecision(number) 有效位数 number must be between 0 and 100 !!!返回结果为string
    • js中唯一一个不等于自身的值 NaN
    pollyfill
    if(!Number.isNaN) {
        Number.isNaN = function(n) {
       	 return n!==n;
        }
    }
    
    • 业务中存在方向向量 -0
    function isNegZero(n) {
        n = Number(n);
        return ( n === 0 ) && (1/n === -Infinity);
    }
    

    内建函数

    • String,Number,Boolean, Array, Object, Function, RegExp, Date, Error, Symbol

    ToString

    • Object.prototype.toString = "[object Object]"; 对象可以重写自身的toString()
    • 如数组的toString
    var a = [1,1,2,3,100];
    console.info(a.toString()); // 1,1,2,3,100
    

    ToNumber

    • true =1 , false = 0 , undefined = NaN, null = 0
    • 对象、数组会首先转换成相应的基本数据类型值,如果返回的是非数值的基本数据类型值,则再遵循以上规则将其转换成数字
    var a  = {
    	valueOf: function() {
    		return '32';
    	}
    };
    
    var b = {
    	toString: function() {
    		return '32';
    	}
    };
    
    var c = [3,2];
    c.toString = function() {
    	return this.join('');
    };
    
    
    console.info(Number(a)); //32
    console.info(Number(b)); //32
    console.info(Number(c)); //32
    

    ToBoolean

    • 可以被强制转换为false的值
    • 其他(不可以强制转换的值)
    • 假值: undefined, null, NaN, -0 , +0 , "", false

    时间戳转换

    var timestamp = new Date().getTime();
    
    var timestamp = Date.now();
    
    var timestamp = +new Date();
    

    逻辑运算符[|| &&]的短路机制

    var b ;
    var a = b?b:'b is undefined';
    console.info(a);
    
    var b;
    var a = b || 'b is undefined';
    console.info(a); // b is undefined
    
    
    var c;
    ...
    var e = c?d:f;
    
    var e = c && f;
    

    boolean

    	思考:  
    	'true' == true?
    	'43' == true
    	'0'  == false
    	1 == true 
    
    
    • 千万不要将基本数据类型与boolean类型直接比较==; 请使用(!!var)
    大头的疑问,如下实现以下条件满足
    
    if(a == 2 && a == 3) {
    	console.info('Yes, it is true')
    }
    
    ------------奇迹代码---------------------------
    var i = 2;
    var a = new Number(2);
    
    Number.prototype.valueOf = function() {
    	return i++;
    };
    
    if(a == 2 && a == 3) {
    	console.info('Yes, it is true')
    }
    

    附录

    • polyfill ( 补充代码,用来修复当前运行环境中缺失的功能 )
  • 相关阅读:
    PAT-1020 Tree Traversals
    PAT- 1014 Waiting in Line
    Python稀疏矩阵运算
    阿里云Hadoop集群DataNode连接不上NameNode
    运行python “没有那个文件或目录3” 或 “/usr/local/bin/python3^M: bad interpreter: 没有那个文件或目录” 错误
    #!/usr/bin/python3 和 #!/usr/bin/env python3的区别
    VBoxManage安装
    Redhat终端中文乱码解决
    Redhat更换yum源
    Redhat乱码
  • 原文地址:https://www.cnblogs.com/pengsn/p/13035443.html
Copyright © 2011-2022 走看看