看文章时发现的遗漏的点

栏目: ASP.NET · 发布时间: 6年前

内容简介:Object.prototype.toString.call(obj).slice(8, -1)判断其内置class这个this为啥 this==obj  为falsethis == windon 也为false

Object.prototype.toString.call(obj).slice(8, -1)判断其内置class

编译型语言和解释型语言

1、编译型语言

需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。 一般需经过编译(compile)、链接(linker)这两个步骤

编译是把源代码编译成机器码,

链接是把各个模块的机器码和依赖库串连起来生成可执行文件。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

代表语言:C、C++、Pascal、Object-C以及最近很火的苹果新语言swift

2、解释型语言

解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

代表语言:JavaScript、 Python 、Erlang、 PHPPerl 、Ruby

3、混合型语言

既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于 Java 虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。Java先生成字节码再在Java虚拟机中解释执行。严格来说混合型语言属于解释型语言。C#更接近编译型语言。

动态语言和静态语言

1、动态语言

是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是 在运行时代码可以根据某些条件改变自身结构

主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

2、静态语言

与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。

有三个名词容易混淆:

Dynamic Programming Language (动态语言或动态编程语言)

Dynamically Typed Language (动态类型语言)

Statically Typed Language (静态类型语言)

动态类型语言和静态类型语言

1、动态类型语言

动态类型语言和动态语言是完全不同的两个概念。

动态类型语言: 是指在运行期间才去做数据类型检查的语言,说的是数据类型,

动态语言: 说的是运行是改变结构,说的是代码结构。

动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

主要语言:Python、 Ruby 、Erlang、JavaScript、swift、PHP、Perl。

2、静态类型语言

静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。

主要语言:C、C++、C#、Java、Object-C。

判断页面是在移动端还是PC端打开

window.location.href = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? "https://www.baidu.com/" :  "http://news.baidu.com/";复制代码

3、js中~~和^=分别代表什么,用处是什么?

先看个栗子:

看文章时发现的遗漏的点
~~false === 0  
~~true === 1
~~undefined === 0 
~~!undefined === 1
~~null === 0
~~!null === 1  ~~"" === 0~~!"" === 1复制代码
看文章时发现的遗漏的点

~是按位取反的意思,计算机里面处理二进制数据时候的非,~~就是再转回来,利用两个按位取反的符号,进行类型的转换,转换成数字符号。

~~能把undefined转为0,number和parseInt只能转为NaN!!!!!

而在计算机里面的^=是异或运算,相同取0,不同取1.

两个整数交换可以酱紫表示:

var a = 10,b=20;
a ^= b; b^=a;a^=b;

将a = a ^= b; b = b^=a; a = a^=b;在js中类似于:

var a = 1,b = 2;
a = a + b;
b = a - b;
a = a - b;
a // 2
b //1

不过这种方法适用于任意两个数字类型的交换,无论是整数类型还是小数。

其次,交换两个变量,最简单的方式是:

var a = 2,b = 'Miya' ;
[a,b,] = [b,a,]
a // Miya
b //2

这个是ES6中的数组的解构赋值,很方便的进行两个变量的交换。

4、this

这个this为啥 this==obj  为false

this == windon 也为false

但在node中为global

看文章时发现的遗漏的点

但如果不自执行,外面调用的话就是==obj

5、声明提升

var a = 1;

function b() {
    a = 10;
    return;

    function a() {}
}
b();
alert(a);复制代码

这个的结果是 1

因为 function a (){}  等同于 var a = function () {}; 相当于声明了一个变量

var a = 1;                 //defines "a" in global scope
function b() {  
   var a = function () {}; //defines "a" in local scope 
   a = 10;                 //overwrites local variable "a"
   return;      
}       
b();       
alert(a);                 //alerts global variable "a"复制代码

6、localStorage存进去时是number 取出来就成string了

//示例一:
localStorage.setItem('test',1234567);
let test = localStorage.getItem('test');
console.log(typeof test, test); 

//示例二:
localStorage['name'] = '苏南';
console.log(localStorage['name']);
/*
输出:
"1234567" ,'苏南',
这里要注意,1234567 存进去时是number 取出来就成string了
*/
复制代码

7、undefined null ->number

看文章时发现的遗漏的点

看文章时发现的遗漏的点

7、字符串与unicode的一些方法

字符串的unicode表示法以及Unicode编码大于65535的字符

"\u{20BB7}"; //��,如果看到的是乱码,则自行在浏览器的console里输入本行代码查看,下同

console.log("\u0041"); //A


以上所述就是小编给大家介绍的《看文章时发现的遗漏的点》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

鸟哥的Linux私房菜

鸟哥的Linux私房菜

鸟哥 / 人民邮电出版社 / 2010-6-28 / 88.00元

本书是最具知名度的Linux入门书《鸟哥的Linux私房菜基础学习篇》的最新版,全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口 shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系......一起来看看 《鸟哥的Linux私房菜》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具