Javascript

Javascript

类型

Undefined
  • 表示未定义, 它的类型只有一个就是undefined。
  • 任何变量在赋值前是undefined类型,值为undefined。
  • void 0 可以取代undefined 这样可以避免无意中被篡改。
  • undefined 是一个变量, 不是关键字
Null
  • 表示定义了,但是为空
  • null是Javascript中的关键字
  • 在任何代码中,都可以用null关键字来获取null值
Boolean
  • Boolean类型有两个值true和false,用于表示逻辑上的真和假
  • true 和 false 是关键字
String
  • 用于表示文本数据
  • string的意义并非"字符串",而是字符串的UTF16编码,我们字符串的操作charAt、charCodeAt、length 等方法针对的都是UTF16编码。
  • 字符串的最大长度,实际上是受字符串编码长度的影响
  • 字符串是永远无法变更的,一旦构造出来,无法用任何方式改变字符串的内容,所以字符串具有值类型的特征。
  • Javascript 字符串把每个UTF16单元当做一个字符串来处理,所以处理非BMP(超出U+0000-U+FFFF)的字符时,应该格外小心处理。
  • Javascript这个设计继承自Java,这样设计是为了"性能和尽可能实现起来简单"。
Number
  • Number(object) 函数把对象的值转换为数字 object 必须为Javascript 对象
  • 返回值:
  • 如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。
  • 如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
        var test1= new Boolean(true);
        var test2= new Boolean(false);
        var test3= new Date();
        var test4= new String("999");
        var test5= new String("999 888");
        
        document.write(Number(test1)+ "<br />"); // 1
        document.write(Number(test2)+ "<br />"); // 0
        document.write(Number(test3)+ "<br />"); // 时间戳
        document.write(Number(test4)+ "<br />"); // 999
        document.write(Number(test5)+ "<br />"); // NaN
  • 浮点数运算,Number.EPSILON的实质是一个可以接受的最小误差范围。
    console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON); // true
    console.log( 0.1 + 0.2 == 0.3); // false
    console.log( 1 + 2 === 3); // true
Symbol
概述
  • Symbol 函数不能使用new命令,否则会报错
  • Symbol 可以接受一个字符串作为参数
    let s1 = Symbol('foo');
    let s2 = Symbol('bar');

    s1 // Symbol(foo)
    s2 // Symbol(bar)

    s1.toString() // "Symbol(foo)"
    s2.toString() // "Symbol(bar)"
  • 如果 Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值
    const obj = {
        toString() {
            return 'abc';
        }
    };
    const sym = Symbol(obj);
    sym // Symbol(abc)
  • Symbol 值不能与其他类型的值进行运算,会报错。
    let sym = Symbol('My symbol');

    "your symbol is " + sym
    // TypeError: can't convert symbol to string
    `your symbol is ${sym}`
    // TypeError: can't convert symbol to string
  • Symbol 值可以显式转为字符串。
    let sym = Symbol('My symbol');

    String(sym) // 'Symbol(My symbol)'
    sym.toString() // 'Symbol(My symbol)'
  • Symbol值可以转换为布尔值,但是不能转为数值
    let sym = Symbol();
    Boolean(sym) // true
    !sym  // false

    if (sym) {
    // ...
    }

    Number(sym) // TypeError: Cannot convert a Symbol value to a numberat Number (<anonymous>)
    sym + 2 // TypeError
  • 获取Symbol的描述
    const sym = Symbol('foo');

    sym.description // "foo"
  • Symbol的属性
    let mySymbol = Symbol();

    // 第一种写法
    let a = {};
    a[mySymbol] = 'Hello!';

    // 第二种写法
    let a = {
    [mySymbol]: 'Hello!'
    };

    // 第三种写法
    let a = {};
    Object.defineProperty(a, mySymbol, { value: 'Hello!' }); // 通过Object.defineProperty,将对象的属性名指定为一个Symbol值

    // 以上写法都得到同样结果
    a[mySymbol] // "Hello!"

  • Symbol作为对象属性名时,不能用点运算符
    // 点运算符后面总是字符串
    const mySymbol = Symbol();
    const a = {};
    a.mySymbol = 'Hello!';
    a[mySymbol] // undefined
    a['mySymbol'] // "Hello!"

  • Symbol类型定义一组常量,保证这组常量的值都是不相等的
    const log = {};

    log.levels = {
        DEBUG: Symbol('debug'),
        INFO: Symbol('info'),
        WARN: Symbol('warn')
    };
    console.log(log.levels.DEBUG, 'debug message');
    console.log(log.levels.INFO, 'info message');
  • Symbol值作为属性名时,该属性是公开属性,不是私有属性
  • Symbol消除魔术字符串的方法
	const shapeType = {
 	  triangle: 'Triangle'
	};
	
	function getArea(shape, options) {
	  let area = 0;
	  switch (shape) {
	    case shapeType.triangle:
	      area = .5 * options.width * options.height; 
	      break;
	  }
	  return area;
	}
	
	getArea(shapeType.triangle, { width: 100, height: 100 });
	// 5000
  1. Object

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值