• JS精粹知识点和我的解释


    函数若是不return则默认返回undefined

    const value=()=>{
    	let a=3;
    }
    let value_test;
    console.log(value(),value_test);  // undefined   undefined
    console.log(typeof value,typeof value_test);  // 
    

    argument并不是一个真正的数组,它拥有一个length属性,但是它没有数组其他的方法。


    • JavaScript只有一个数字类型。它在内部被表示为64位的浮点数。所以,它的1.0和1值是相同的。
      我测试了一下,===> 类型是相同的。
    console.log(1==1.0);  // true
    console.log(1===1.0);  //true
    
    • JS没有字符类型,它不像C++,'a'表示字符,在JS中表示一个字符是创建一个字符串。
      字符串是不可变的。什么叫不可变呢。(有没有一种浓浓的“人可以被毁灭,但不能被打败”的海鸣威既视感)
    str+='a';
    //上面这句话经过了哪些骚操作呢?   1.拷贝str,记为temp   ==>   2. temp末尾加上1 ===>  3.将str指向temp并且  **毁灭原来的str**
    

    字符串是可以被毁灭的,但是不会被改变。恩,就是这样。
    JS的字符是十六位的.这是历史遗留问题。JS被创造的时候,Unicode是一个16位的字符集,So~(16bits = 2bytes ==> 每个字符需要两个字节,C++中char1个字节,int两个字节,某种程度某种情况上来说JS比较浪费资源?)

    • 下面列出的值被当做假的(false)
      - false
      - null
      - 0 数字0
      - ' ' 空字符串
      - NaN 数字NaN
      - undefined
      其他的所有值都表示为真,包括true,包括"false"字符串
      我在react中遇到的JS基础:空数组被作为判断源的时候,是true!!! [] 是true, [] 是true, [] 是true, [] 是true, [] 是true, [] 是true, [] 是true

    • for in通常用来遍历带有key值的对象。不推荐用来遍历数组,因为for in会将扩展的对象也遍历进来。

    var my_obj = {
    	a: 1,
    	b: 2
    }
    Object.prototype.c = 30;
    for (item in my_obj) {
    	console.log(item);
    } //最后输出a,b,c
    

    根本原因在于有的时候我们只想要输出a,b。在原型上定义方法这种操作我们完全不知道谁会去做,这让程序非常不可控制,所以就有了 hasOwnProperty这个判断方法。
    for in是很强大的,它将它的手伸向了obj本身就有的属性,还伸向了原型上扩展的属性。

    for (item in my_obj) {
    	if (my_obj.hasOwnProperty(item)) {
    		console.log(item);
    	}
    } //最后输出a,b
    

    关于parseInt 和 Number的差别

    var a=Number("");  // 0
    var b=parseInt("");  // NaN
    
    	console.log(Number(""),Number(null),Number(String);  // 0  0  NaN
    	console.log(parseInt(""),parseInt(null),parseInt(String); // NaN NaN  NaN
    

    上面的例子是我在 2017-8-28 (今日)发现的,因为通过 style[attr]获取属性的时候类型都为String,哪怕是没有设置样式也是string,在这个时候 Number和parseInt非常有默契地保持了一致。

    还有一件有趣的事情

    	var a=new String('0');
    	console.log(a);
    	var b=new String(0);
    	console.log(b);
    

    返回值都是一模一样的,都是String {0: "0", length: 1, [[PrimitiveValue]]: "0"}
    那么,我们平时返回空样式的时候是怎么样的呢?

    	let box2=document.getElementsByClassName("box2")[0];
    	let test=new String();
    	let box_test=box2.style.width;
    	console.log(test==box_test);  // true
    	console.log(test===box_test); //false
    	console.log(typeof test,typeof box_test); // object string
    	// 前面相等是因为先做了一次类型转换,将string转换成了object
    

    意思是说,空字符串不等于 null,判断空字符串还是用 字符串长度 length 来判断吧。

    true和fales是区分大小写的,不存在True和False作为boolean变量。

  • 相关阅读:
    225. Implement Stack using Queues
    150. Evaluate Reverse Polish Notation
    159 Longest Substring with At Most Two Distinct Characters
    142. Linked List Cycle II
    打印沙漏 (20 分)
    人见人爱A-B
    人见人爱A+B
    杨辉三角
    进制转换
    汉字统计
  • 原文地址:https://www.cnblogs.com/can-i-do/p/7197956.html
Copyright © 2020-2023  润新知