内容简介: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、 PHP 、 Perl 、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
以上所述就是小编给大家介绍的《看文章时发现的遗漏的点》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何做到测试场景不遗漏?
- 被遗漏的0day?APT-C-06组织另一网络武器库分析揭秘
- Kubernetes首个严重安全漏洞发现者,谈发现过程及原理机制
- 服务发现之Consul
- 服务发现-注册中心概述
- 四层发现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Don't Make Me Think
Steve Krug / New Riders Press / 18 August, 2005 / $35.00
Five years and more than 100,000 copies after it was first published, it's hard to imagine anyone working in Web design who hasn't read Steve Krug's "instant classic" on Web usability, but people are ......一起来看看 《Don't Make Me Think》 这本书的介绍吧!
MD5 加密
MD5 加密工具
HEX CMYK 转换工具
HEX CMYK 互转工具