Coder Social home page Coder Social logo

js2php's Introduction

js2php

Build status

JavaScript to PHP source-to-source transpiler. Online demo

This is an experiment. Please do not use it.

Installation

  • Install nodejs
  • Install js2php globally: npm install -g js2php

Usage

Convert a single JavaScript file into PHP:

js2php examples/simple.js > simple.php

Since js2php outputs the PHP code to stdout, you may run it right after conversion:

js2php examples/class.js | php

Features

What does it converts?

  • Classes (ES6)
  • Getters and Setters (ES6)
  • Namespaces (ES6)
  • Loops (while / for / do-while / for-of / for-in)
  • Arrow functions (ES6)
  • Template strings (ES6)
  • Functions and closures
  • Conditionals
  • Core JavaScript
    • Array
      • Array.prototype.unshift
      • Array.prototype.shift
      • Array.prototype.reverse
      • Array.prototype.push
      • Array.prototype.pop
      • Array.prototype.join
      • Array.prototype.splice
      • Array.prototype.indexOf
      • Array.prototype.length
    • JSON
      • JSON.parse
      • JSON.stringify
    • Math
      • Math.E
      • Math.LN2
      • Math.LN10
      • Math.LOG2E
      • Math.LOG10E
      • Math.PI
      • Math.SQRT2
      • Math.SQRT1_2
      • Math.abs
      • Math.acos
      • Math.acosh
      • Math.asin
      • Math.asinh
      • Math.atan
      • Math.atanh
      • Math.atan2
      • Math.cbrt
      • Math.ceil
      • Math.clz32
      • Math.cos
      • Math.cosh
      • Math.exp
      • Math.expm1
      • Math.floor
      • Math.hypot
      • Math.log
      • Math.log1p
      • Math.log10
      • Math.max
      • Math.min
      • Math.pow
      • Math.random
      • Math.round
      • Math.sin
      • Math.sinh
      • Math.sqrt
      • Math.tan
      • Math.tanh
    • Number
      • Number.isInteger
      • Number.isFinite
    • String
      • String.prototype.replace
      • String.prototype.trim
      • String.prototype.trimRight
      • String.prototype.trimLeft
      • String.prototype.toUpperCase
      • String.prototype.toLowerCase
      • String.prototype.split
      • String.prototype.substr
      • String.prototype.match
    • Function
      • Function.prototype.apply
      • Function.prototype.call
    • Date
      • Date.now

Testing

Tests are simple input (js) / output (php) comparisions.

  1. Create your source .js file at test/fixtures/js_feature.js
  2. Convert your .js to .php manually: node test/generate.js js_feature.js
  3. Run npm test

License

MIT

js2php's People

Contributors

2pha avatar allain avatar cscott avatar endel avatar grynn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

js2php's Issues

Problem with new global function implementation.

Adding this to the fixture produces an error:

let temp = "50";
var_dump(parseInt(temp));

The error is:
"'Cannot read property 'scope' of undefined' TypeError: Cannot read property 'scope' of undefined".
in
"at Object.get (/js2php/scope.js:66:14)"

Handling arrays

This may be related to issue #41.

I failed with this JS code.

function compute() {
  var some = [1,2,3];
  var any = some[2];
}

The Github page said that js2php is an experiment. A very cool one, I think :)

inline anonymous functions

php don't support inline anonymous function.

this js code

var x = (function(x) {
  return x + 1;        
})(1);

is compiled in this php

<?php
$x = function ($x) use (&$x) {
return $x + 1;
}
(1);

but should be

<?php
$tmp_function_000001 = function ($x) use (&$x) {
return $x + 1;
};
$x = $tmp_function_000001(1); 


brackets are lost

function foo( a, b, c, d ) {
	return ( a + b ) * ( c + d );
}

is incorrectly converted to

<?php
function foo($a, $b, $c, $d) {
	return $a + $b * $c + $d;  //should be ($a + $b) * ($c + $d)
}

the brackets are lost.

tested on http://endel.me/js2php/

Set / get property on object

Given the following JS code:

let a = {};
a.foo = 123;
var_dump(a.foo);

js2php transpiles it to:

$a = array();
$a->foo = 123;
var_dump($a->foo);

But the PHP code doesn't work because we cannot set arbitrary variables on object (this is also the case for class instances, let's say you had let a = new MyClass()). Because this is a major difference between the two languages, I doubt it will be easy to fix. I think that the best thing that can be done would be to override __set and __get and keep a private $properties = array() inside each class.
Anyways, I just discovered your project and it looks really interesting, I'll stay updated !

.length not always working on strings

eg.
Input:

var st = 'testing';
var hmm = st.length;
console.log(st.length);

Output:

$st = 'testing';
$hmm = strlen($st);
$console->log(count($console));

I am working on a fix.

error in class inheritance

class inherited isn't write in php code

class ArticlePage extends Page {
}

ArticlePage.db = {
  Date:'Date'
}
<?php
class ArticlePage extends [object Object]
{

}
ArticlePage::db = array("Date" => 'Date');

[object Object] should be Page

Cannot read property 'match' of undefined

I've tried to transpile my S-Expression parser to php

But got this error:

/mnt/ssd/projects/jcubic/lip/node_modules/js2php/core/string.js:119
    var regexpData = args[0].raw.match(/^\/([^\/]+)\/([gimy])?$/),
                                 ^

TypeError: Cannot read property 'match' of undefined
    at split (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/core/string.js:119:34)
    at Object.evaluate (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/core.js:26:18)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:235:26)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:196:20)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:269:21)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:196:20)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:269:21)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:196:20)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:182:24)
    at visit (/mnt/ssd/projects/jcubic/lip/node_modules/js2php/index.js:52:20)

It may be because of this:

var re = new RegExp("((^|[^\\\\])(?:\\\\\\\\)*)" + quote, "g");

in my code I'm parsing multiline string that may have escaped quotes.

print error on transfer md5 function TypeError: Cannot set property 'parent' of null

print error on transfer md5 function

C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\index.js:47
if (parent) { node.parent = parent; }
^

TypeError: Cannot set property 'parent' of null
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:47:31)
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:426:18)
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:52:20)
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:266:27)
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:52:20)
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:266:27)
at visit (C:\Users\Administrator\AppData\Roaming\npm\node_modules\js2php\ind
ex.js:52:20)
at module.exports (C:\Users\Administrator\AppData\Roaming\npm\node_modules\j
s2php\index.js:538:22)
at Object. (C:\Users\Administrator\AppData\Roaming\npm\node_modul
es\js2php\js2php:12:19)
at Module._compile (module.js:409:26)

function g(a) {
    function b(a, b) {
        return a << b | a >>> 32 - b
    }

    function c(a, b) {
        var c, d, e, f, g;
        return e = 2147483648 & a, f = 2147483648 & b, c = 1073741824 & a, d = 1073741824 & b, g = (1073741823 & a) + (1073741823 & b), c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : g ^ e ^ f
    }

    function d(a, b, c) {
        return a & b | ~a & c
    }

    function e(a, b, c) {
        return a & c | b & ~c
    }

    function f(a, b, c) {
        return a ^ b ^ c
    }

    function g(a, b, c) {
        return b ^ (a | ~c)
    }

    function h(a, e, f, g, h, i, j) {
        return a = c(a, c(c(d(e, f, g), h), j)), c(b(a, i), e)
    }

    function i(a, d, f, g, h, i, j) {
        return a = c(a, c(c(e(d, f, g), h), j)), c(b(a, i), d)
    }

    function j(a, d, e, g, h, i, j) {
        return a = c(a, c(c(f(d, e, g), h), j)), c(b(a, i), d)
    }

    function k(a, d, e, f, h, i, j) {
        return a = c(a, c(c(g(d, e, f), h), j)), c(b(a, i), d)
    }

    function l(a) {
        for (var b, c = a.length, d = c + 8, e = (d - d % 64) / 64, f = 16 * (e + 1), g = new Array(f - 1), h = 0, i = 0; c > i;) b = (i - i % 4) / 4, h = i % 4 * 8, g[b] = g[b] | a.charCodeAt(i) << h, i++;
        return b = (i - i % 4) / 4, h = i % 4 * 8, g[b] = g[b] | 128 << h, g[f - 2] = c << 3, g[f - 1] = c >>> 29, g
    }

    function m(a) {
        var b, c, d = '',
            e = '';
        for (c = 0; 3 >= c; c++) b = a >>> 8 * c & 255, e = '0' + b.toString(16), d += e.substr(e.length - 2, 2);
        return d
    }

    function n(a) {
        a = a.replace(/\r\n/g, '\n');
        for (var b = '', c = 0; c < a.length; c++) {
            var d = a.charCodeAt(c);
            128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(d >> 6 | 192), b += String.fromCharCode(63 & d | 128)) : (b += String.fromCharCode(d >> 12 | 224), b += String.fromCharCode(d >> 6 & 63 | 128), b += String.fromCharCode(63 & d | 128))
        }
        return b
    }
    var o, p, q, r, s, t, u, v, w, x = [],
        y = 7,
        z = 12,
        A = 17,
        B = 22,
        C = 5,
        D = 9,
        E = 14,
        F = 20,
        G = 4,
        H = 11,
        I = 16,
        J = 23,
        K = 6,
        L = 10,
        M = 15,
        N = 21;
    for (a = n(a), x = l(a), t = 1732584193, u = 4023233417, v = 2562383102, w = 271733878, o = 0; o < x.length; o += 16) p = t, q = u, r = v, s = w, t = h(t, u, v, w, x[o + 0], y, 3614090360), w = h(w, t, u, v, x[o + 1], z, 3905402710), v = h(v, w, t, u, x[o + 2], A, 606105819), u = h(u, v, w, t, x[o + 3], B, 3250441966), t = h(t, u, v, w, x[o + 4], y, 4118548399), w = h(w, t, u, v, x[o + 5], z, 1200080426), v = h(v, w, t, u, x[o + 6], A, 2821735955), u = h(u, v, w, t, x[o + 7], B, 4249261313), t = h(t, u, v, w, x[o + 8], y, 1770035416), w = h(w, t, u, v, x[o + 9], z, 2336552879), v = h(v, w, t, u, x[o + 10], A, 4294925233), u = h(u, v, w, t, x[o + 11], B, 2304563134), t = h(t, u, v, w, x[o + 12], y, 1804603682), w = h(w, t, u, v, x[o + 13], z, 4254626195), v = h(v, w, t, u, x[o + 14], A, 2792965006), u = h(u, v, w, t, x[o + 15], B, 1236535329), t = i(t, u, v, w, x[o + 1], C, 4129170786), w = i(w, t, u, v, x[o + 6], D, 3225465664), v = i(v, w, t, u, x[o + 11], E, 643717713), u = i(u, v, w, t, x[o + 0], F, 3921069994), t = i(t, u, v, w, x[o + 5], C, 3593408605), w = i(w, t, u, v, x[o + 10], D, 38016083), v = i(v, w, t, u, x[o + 15], E, 3634488961), u = i(u, v, w, t, x[o + 4], F, 3889429448), t = i(t, u, v, w, x[o + 9], C, 568446438), w = i(w, t, u, v, x[o + 14], D, 3275163606), v = i(v, w, t, u, x[o + 3], E, 4107603335), u = i(u, v, w, t, x[o + 8], F, 1163531501), t = i(t, u, v, w, x[o + 13], C, 2850285829), w = i(w, t, u, v, x[o + 2], D, 4243563512), v = i(v, w, t, u, x[o + 7], E, 1735328473), u = i(u, v, w, t, x[o + 12], F, 2368359562), t = j(t, u, v, w, x[o + 5], G, 4294588738), w = j(w, t, u, v, x[o + 8], H, 2272392833), v = j(v, w, t, u, x[o + 11], I, 1839030562), u = j(u, v, w, t, x[o + 14], J, 4259657740), t = j(t, u, v, w, x[o + 1], G, 2763975236), w = j(w, t, u, v, x[o + 4], H, 1272893353), v = j(v, w, t, u, x[o + 7], I, 4139469664), u = j(u, v, w, t, x[o + 10], J, 3200236656), t = j(t, u, v, w, x[o + 13], G, 681279174), w = j(w, t, u, v, x[o + 0], H, 3936430074), v = j(v, w, t, u, x[o + 3], I, 3572445317), u = j(u, v, w, t, x[o + 6], J, 76029189), t = j(t, u, v, w, x[o + 9], G, 3654602809), w = j(w, t, u, v, x[o + 12], H, 3873151461), v = j(v, w, t, u, x[o + 15], I, 530742520), u = j(u, v, w, t, x[o + 2], J, 3299628645), t = k(t, u, v, w, x[o + 0], K, 4096336452), w = k(w, t, u, v, x[o + 7], L, 1126891415), v = k(v, w, t, u, x[o + 14], M, 2878612391), u = k(u, v, w, t, x[o + 5], N, 4237533241), t = k(t, u, v, w, x[o + 12], K, 1700485571), w = k(w, t, u, v, x[o + 3], L, 2399980690), v = k(v, w, t, u, x[o + 10], M, 4293915773), u = k(u, v, w, t, x[o + 1], N, 2240044497), t = k(t, u, v, w, x[o + 8], K, 1873313359), w = k(w, t, u, v, x[o + 15], L, 4264355552), v = k(v, w, t, u, x[o + 6], M, 2734768916), u = k(u, v, w, t, x[o + 13], N, 1309151649), t = k(t, u, v, w, x[o + 4], K, 4149444226), w = k(w, t, u, v, x[o + 11], L, 3174756917), v = k(v, w, t, u, x[o + 2], M, 718787259), u = k(u, v, w, t, x[o + 9], N, 3951481745), t = c(t, p), u = c(u, q), v = c(v, r), w = c(w, s);
    var O = m(t) + m(u) + m(v) + m(w);
    return O.toLowerCase()
}

ReactJS server (ReactDOMServer) side rendering

Hi,

I've been trying to get this to work for React with server side rendering, and I'm curious whether you have ever tried that. If that could work, that could be a great way to bridge the gap with React based SPAs, and the need for server side rendering on PHP hosts that don't support running JS (no V8 extension, etc.).

I did a quick test where I tried to bundle a little hello world React component with JSPM (using defaults - bundle everything with SystemJS and default babel - ES5 - settings). It didn't work though, giving me an error about being unable to convert undefined or null.

Even better may be to use babel to convert JSX to ES6 compatible code in individual modules, and use the package import support that seems to exist within js2php. Do you think something like this could work?

I still also have to work out how to pull in npm modules (like React and ReactDOM) in an effective way.

Great project - thanks!

Global parseInt and parseFloat functions

The global javascript functions parseInt and parseFloat map pretty well to the PHP intval and floatval functions, it would be nice to support them. (and I need them on a project I am on).

I had a quick look in to it and it seems it won't be as easy as mapping functions that are on objects as these functions are in the global scope.

Cannot run program over terminal

OS: Windows 10

internal/fs/utils.js:537
    throw new ERR_INVALID_ARG_TYPE(propName, ['string', 'Buffer', 'URL'], path);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received undefined
�[90m    at Object.openSync (fs.js:450:10)�[39m
�[90m    at Object.readFileSync (fs.js:360:35)�[39m
    at Object.<anonymous> (C:\Users\Admin\AppData\Roaming\npm\node_modules\�[4mjs2php�[24m\js2php:12:29)
�[90m    at Module._compile (internal/modules/cjs/loader.js:1138:30)�[39m
�[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)�[39m
�[90m    at Module.load (internal/modules/cjs/loader.js:986:32)�[39m
�[90m    at Function.Module._load (internal/modules/cjs/loader.js:879:14)�[39m
�[90m    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)�[39m
�[90m    at internal/main/run_main_module.js:17:47�[39m {
  code: �[32m'ERR_INVALID_ARG_TYPE'�[39m
}

"TypeError: Cannot read property 'type' of undefined" when converting core_functions.js

Hi,

I can't convert core_functions.js:

$ js2php core_functions.js

/usr/local/lib/node_modules/js2php/index.js:87
      if (node.parent.type !== "MemberExpression" &&
                     ^
TypeError: Cannot read property 'type' of undefined
    at visit (/usr/local/lib/node_modules/js2php/index.js:87:22)
    at visit (/usr/local/lib/node_modules/js2php/index.js:185:24)
    at visit (/usr/local/lib/node_modules/js2php/index.js:29:20)
    at module.exports (/usr/local/lib/node_modules/js2php/index.js:256:22)
    at Object.<anonymous> (/usr/local/lib/node_modules/js2php/js2php:4:14)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

remove console.log

first at all - Nice project for simple functions.

Would be gread if you remove console.log from js

ECMAScript Compliant?

Hey @endel this is a really cool project! It's similar to what I'm working on at https://github.com/sstur/js2php but much simpler. I like your approach, it's clean and produces nice PHP.

My project aims to run (almost) any existing JS so it needs to be (pretty much) spec-compliant. It seems like your project more plainly translates JS syntax to PHP styntax without necicarily patching all the differences in the two languages.

For example, if you transform console.log('hi') your js2php will produce the nice and simple:

$console->log('hi');

In contrast, my js2php will output the uglier:

call_method($console, "log", "hi");

but it will work with edge cases like console.log.apply(null, array). JS has a lot of edge cases I've learned about while creating js2php. Like using the plus operator for string concatination console.log('hi ' + name). If you translate that to:

$console->log('hi ' + $name);

it uses the arithmetic plus so will output null.

There's tons of these languages differences for instance JS has null and undefined. PHP has integer and float (in PHP 0.5 + 0.5 !== 1). JS can call methods on primitives and JS hoists function declarations. Plus you have the whole passing "by value" and "by reference" in PHP.

console.log(typeof {}) //should be 'object'
console.log(typeof []) //should be 'array'
var s = 'abc'; s.length //should be 3
var a = []; a.length //should be 0
function Thing() {}; Thing.prototype.foo = 'bar'; // new Thing().foo should be 'bar'
console.log(NaN ? true : false); //should output false
var a = []; a.push.call(a, 1, 2, 3); //a should be [1, 2, 3]

You will uncover some really hairy stuff as you start writing tests and realize how different the two languages are in so many weird ways. Not to mention Unicode which is a disaster in PHP and needs a lot of workarounds to get JS string behavior.

I'm curious what you're going for here, if it's simply to write PHP in the much nicer syntax of JS but keep the PHP behavior under the covers. Or if it's to put real world JS code through this and have PHP produce the same results that a JS engine would.

I honestly think there's use cases for both. and either way I'm happy to help and/or pool efforts where our projects overlap!

Feel free to take my tests cases from https://github.com/sstur/js2php/tree/master/test and let me know if I can help out!

Fail to convert function with split

Running with this code

function getStrAfter(str, delimiter) {
       var pre=str.split(delimiter,2);
       if(pre.length>1){
           return pre[1];
       }else{
           return str;
       }           
}

I got


 C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\core\string.js:116
    var regexpData = args[0].raw.match(/^\/([^\/]+)\/([gimy])?$/),
                                ^

TypeError: Cannot read property 'match' of undefined
    at module.exports.split (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\core\string.js:116:33)
    at Object.module.exports.evaluate (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\core.js:22:24)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:198:26)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:166:18)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:68:28)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:58:20)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:52:20)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:266:27)
    at visit (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:52:20)
    at module.exports (C:\Users\Me\AppData\Roaming\npm\node_modules\js2php\index.js:538:22)

Throwing error

    if (parent) { node.parent = parent; }
                              ^
TypeError: Cannot set property 'parent' of null
    at visit (/usr/local/lib/node_modules/js2php/index.js:47:31)
    at visit (/usr/local/lib/node_modules/js2php/index.js:424:18)
    at visit (/usr/local/lib/node_modules/js2php/index.js:52:20)
    at visit (/usr/local/lib/node_modules/js2php/index.js:387:18)
    at visit (/usr/local/lib/node_modules/js2php/index.js:396:22)
    at visit (/usr/local/lib/node_modules/js2php/index.js:396:22)
    at visit (/usr/local/lib/node_modules/js2php/index.js:396:22)
    at visit (/usr/local/lib/node_modules/js2php/index.js:52:20)
    at visit (/usr/local/lib/node_modules/js2php/index.js:266:27)
    at visit (/usr/local/lib/node_modules/js2php/index.js:483:17)

Initially it was causing issue due to throw statement. But it is failing even after commenting throw statement.

Here is the javascript code nimn.js. I had simplified template literals in normal string concatenation form in doubt if they are not supported.

JS string concat issue

Hi i try to print var value with some string.

js code
function print(a)
{
print("var a value "+a+"");
}
print(10);

php convert code.
< ? php
function print($a) {
print("var a value " + $a + "");
}
print(10);

Error
print("var a value " + $a + "");
expect - print("var a value " . $a . "");

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.